HOME >> Tips >> Microsoft SQL Server

ロックエスカレーションを禁止する設定

2015/7/5
文書番号:20329

ひとつのテーブルに対して行単位のロックを大量に実行するよりもテーブル単位でひとつのロックを実行したほうがレスポンスがよくなることがあります。
ただし、同時実行時の競合が発生する可能性は大きくなります。

通常はロックエスカレーションが有効になっていますがロックエスカレーションを禁止したい場合には以下のように設定できます。

ロックエスカレーションをテーブル単位で禁止する設定

--ロックエスカレーションを禁止する
ALTER TABLE テーブル名
SET ( LOCK_ESCALATION = DISABLE )
禁止した設定を元に戻す設定

--ロックエスカレーションの設定を元に戻す
ALTER TABLE テーブル名
SET ( LOCK_ESCALATION = TABLE )
ロックエスカレーションの設定を確認する

--ロックエスカレーションの設定を確認する
SELECT NAME
      ,LOCK_ESCALATION
      ,LOCK_ESCALATION_DESC
※LOCK_ESCALATION,LOCK_ESCALATION_DESC列の値について
LOCK_ESCALATION LOCK_ESCALATION_DESC
0 TABLE(初期値)
1 DISABLE
2 AUTO

【参考情報】

[SQL Server]ロックのエスカレーション (データベース エンジン)
https://technet.microsoft.com/ja-jp/library/ms184286(v=sql.105).aspx

[SQL Server]ALTER TABLE (Transact-SQL)
https://msdn.microsoft.com/ja-jp/library/ms190273(v=sql.120).aspx