"Lock Escalation"は、SQLが大きな更新のロックを処理する方法です。 SQLが多くの行を変更する場合、データベースエンジンは多くの小さなもの(たとえば行ロック)をロックするのではなく、より少ないロック(たとえばテーブル全体)をとる方が効率的です。
しかし、テーブル全体をロックすると他のクエリが長期間ロックアウトされる可能性があるため、巨大なテーブルを使用すると問題になることがあります。これはトレードオフです:小規模ロックの多くは粗ロックよりも遅く、テーブルの異なる部分をロックする複数のクエリを持つと、あるプロセスが別のプロセスを待機している場合にデッドロックが発生する可能性があります。
テーブルレベルのオプションLOCK_ESCALATION
(SQL 2008の新機能)では、ロックのエスカレーションを制御できます。デフォルトの "TABLE"では、ロックをテーブルレベルまでエスカレートすることができます。 DISABLEは、ほとんどの場合、テーブル全体へのロックエスカレーションを防ぎます。 AUTOでは、表がパーティション化されている場合を除いて表ロックが許可されます。この場合、ロックはパーティション・レベルでのみ作成されます。詳細は、this blog postを参照してください。
テーブルがSQL 2008のデフォルトであるため、テーブルを再作成するときにIDEがこの設定を追加すると思われます.LOCK_ESCALATIONはSQL 2005ではサポートされていないため、実行しようとするとストリップする必要があります2005年のインスタンスのスクリプト。また、TABLEがデフォルトであるため、スクリプトを再実行するときに、その行を安全に削除することができます。
はまた、この設定が存在していた前に、SQL 2005年に、すべてのロックは、他の言葉でテーブルlevel--にエスカレートでき、ことに注意して、「TABLEは、」あなたはあなたのかどうかを確認することができますSQL 2005
MSDNフォーラムの重複した投稿も同様です。http://social.msdn.microsoft.com/Forums/en/US/sqldatabaseengine/thread/e96aa19e-d72c-46af-b2e8-4bf54de09440 –
@JustinGrant:この式'CREATE TABLE'文と組み合わされますか? –
@dma_k - このオプションは、テーブルがまだ存在しないためにロックするものがないので、 'CREATE TABLE'には関係ありません。 –