私は、画面上のユーザーアクションによって、新しいレコードが約50の異なるテーブルにリアルタイムで作成されるというシナリオを持っています。ユースケースの設計は、ユーザーアクションの結果として作成された新しいレコードが、ユーザーが変更を行うとすぐに必要となるようなものです。したがって、オフラインまたは遅延創造の可能性はありません。SQL Server - 挿入が多い長いトランザクションのパフォーマンスを向上させるためのより良い方法はありますか?
明らかな問題点は、挿入文(いくつかの追加の操作文とともに)がトランザクション内にあることであり、実際には非常に長いトランザクションになります。これは約30秒間実行され、タイムアウトが発生したり、他のクエリがブロックされることがあります。
アトミック性にはトランザクションが必要です。トランザクションを分割して一貫性を維持するための良い方法はありますか?あるいは現在の状況を改善する他の方法?
50個のテーブルでわずか数百レコードの30秒ですか?それは壊滅的に遅いでしょう。実行計画を調べ、統計を更新し、いくつかのインデックスを追加したり、クエリを書き換えて数分の1にします。 –
プライマリテーブルのインデックスを確認し、もう一度見ていきます。レコードが挿入されるテーブルはすべて、アプリ内の他のいくつかのページで頻繁に使用される「プライマリテーブル」です。主な問題は、挿入クエリが、その時点で同時に実行されている他の(主に選択された)クエリを待っているように見えることです。トランザクションは長いため、1つのテーブルまたは他のテーブルでブロックします。 – Lalman
実行計画にネストされたループがない場合は、他のトラフィックが原因である可能性があります。比較的容易なアクションの1つは、他のトラフィックの中でより遅いクエリを監視し、最悪の犯罪者を最適化するか、プライマリテーブルではなく特殊なインデックス付きビューを使用するように書き直すことです。 –