X
の独占性 ロックとU
ロック
以下のロック互換性マトリックスでは、X
ロックは、スキーマの安定性および挿入範囲-ヌルロックタイプとのみ互換性があります。 U
次の追加の共有ロックタイプS
と互換性があります / IS
/ RS-S
/ RI-S
/ RX-S
ロック互換性マトリックスhttp://i.msdn.microsoft.com/ms186396.LockConflictTable(en-us,SQL.105).gif
X
の粒度 ロック
これらはすべてのレベルでうまく取り出されます。以下のスクリプトとプロファイラーのトレースは、行レベルで正常に取り出されていることを示しています。
CREATE TABLE test_table (id int identity(1,1) primary key, col char(40))
INSERT INTO test_table
SELECT NEWID() FROM sys.objects
select * from test_table with (rowlock,XLOCK) where id=10
ただし、行は引き続き読み取ることができます!
read committed
で 分離レベルのSQLServerは、常にS
を取得するとは限りません。 ロックの場合、ロックなしでコミットされていないデータを読み取るリスクがない場合は、この手順をスキップします。これは、ロックの競合が発生する保証がないことを意味します。
ただし、最初の選択がwith (paglock,XLOCK)
の場合 次に、これは X
として読み取りトランザクションを停止します ページをロックすると、IS
がブロックされます リーダーが常に必要とするページロック。もちろん、これは同時実行性に影響を与えます。
その他の警告
行/ページをロックしても、これはテーブル内のその行へのすべてのアクセスをブロックすることを意味するわけではありません。クラスター化インデックスの行をロックしても、対象となる非クラスター化インデックスの対応する行からデータを読み取るクエリが妨げられることはありません。