SQLSERVER 行ロックの真実

SQL SERVER2005にて行ロックの実験をしてみたいと思います。

下記のSQLをManagementStudioより実行します。


まずはテーブルを作成してデータをセットします。


CREATE TABLE IKENIE(A INT)
INSERT INTO IKENIE SELECT 1
INSERT INTO IKENIE SELECT 2
INSERT INTO IKENIE SELECT 3
INSERT INTO IKENIE SELECT 4
INSERT INTO IKENIE SELECT 5
INSERT INTO IKENIE SELECT 6
INSERT INTO IKENIE SELECT 7
INSERT INTO IKENIE SELECT 8
INSERT INTO IKENIE SELECT 9
INSERT INTO IKENIE SELECT 10


次に1件だけを対象に行レベルの更新ロックをかけてみます。


BEGIN TRAN


SELECT TOP 1 *
FROM IKENIE WITH(UPDLOCK,ROWLOCK)
ORDER BY A



利用状況モニタより、ロックの状況を確認してみましょう。

このようにロックエスカレーションせずに、テーブル内のすべての行が確実に行ロックされているのが確認できますね。!!!んっ!?