TABLOCKテーブルヒントを使用してそれを読んでいました
のようなステートメントに対して
INSERT INTO Tab1
SELECT * FROM Tab2
トランザクション ログを最適化できます。
テーブル全体をロックするため、他のプロセスがアクセスできないため、これを理解していません。これTablock
により、トランザクションログがどのように最適化されますか?
TABLOCKテーブルヒントを使用してそれを読んでいました
のようなステートメントに対して
INSERT INTO Tab1
SELECT * FROM Tab2
トランザクション ログを最適化できます。
テーブル全体をロックするため、他のプロセスがアクセスできないため、これを理解していません。これTablock
により、トランザクションログがどのように最適化されますか?
ヒントがないとTABLOCK
、SQL Server は通常の行レベルのロックを使用します。そのため、挿入しようとする行ごとに、挿入される新しい行をロックしてから先に進みます。これにより、保持および管理が必要なロックが大量に発生する可能性があります。
TABLOCK
プロセスのテーブル全体をロックするだけなので、そのステートメントINSERT ... SELECT ...
の実行中は他のトランザクションはテーブルにアクセスできませんが、(テーブルに) ロックが 1 つしかないため、管理オーバーヘッドの量は、新しく挿入された行に数十、数百、さらには数千もの個別のロックを設定します。