4

TABLOCKテーブルヒントを使用してそれを読んでいました

のようなステートメントに対して

INSERT INTO Tab1 
SELECT * FROM Tab2

トランザクション ログを最適化できます。

テーブル全体をロックするため、他のプロセスがアクセスできないため、これを理解していません。これTablockにより、トランザクションログがどのように最適化されますか?

4

1 に答える 1

16

ヒントがないとTABLOCK、SQL Server は通常の行レベルのロックを使用します。そのため、挿入しようとする行ごとに、挿入される新しい行をロックしてから先に進みます。これにより、保持および管理が必要なロックが大量に発生する可能性があります。

TABLOCKプロセスのテーブル全体をロックするだけなので、そのステートメントINSERT ... SELECT ...の実行中は他のトランザクションはテーブルにアクセスできませんが、(テーブルに) ロックが 1 つしかないため、管理オーバーヘッドの量は、新しく挿入された行に数十、数百、さらには数千もの個別のロックを設定します。

于 2013-09-08T06:44:54.957 に答える