SQL Server

SQLServerのテーブルロック状態を取得するSQL

投稿日:2014/04/08 更新日:

SQLServerのデッドロックを調査している中でロックの状態を調べるSQLがあることが判明したのでメモします。

ロックの状態を取得するSQL

ロックの状態を取得するSQLは以下のようにすれば取得できるようです。
(参考ページ:ロックの状態を調べる

SQLの実行結果

上記のSQL実行結果は

ロックの種類

ロックの種類は以下のものになります。

S 共有ロック 他のトランザクションからの読込は可能。更新は不可となる。
X 排他ロック 他のトランザクションからの読込・更新が共に不可となる。
INSERT、UPDATE、DELETEを実行するとこのロックになる。
U 更新ロック 他のトランザクションからの読込は可能。更新は不可となる。
SELECTで WITH( UPDLOCK )を指定するとこのロックになる。
IS インテント共有 下位の階層に位置するリソースの (すべてではなく)
一部に対し、要求されているかかけられている共有ロックを保護します。
IX インテント排他 下位の階層に位置するリソースの (すべてではなく)
一部に対し、要求されているかかけられている排他ロックを保護します。
IX は IS のスーパーセットです。また、下位のリソースに対する共有ロックの要求を保護します。
SIX インテント排他の共有 下位の階層に位置するすべてのリソースに対し、
要求されているかかけられている共有ロックを保護し、下位のリソースの (すべてではなく)
一部のインテント排他ロックを保護します。
上位リソースで同時実行している IS ロックは可能です。
たとえば、テーブルに対し SIX ロックをかけると、
変更中のページにインテント排他ロックが、変更中の行に排他ロックがかかります。
1 つのリソースに対しては、一度に1つのSIXロックしかかけられません。
その結果、他のトランザクションによってリソースが更新されることはなくなりますが、
他のトランザクションはテーブルレベルのISロックをかけることで
下位のリソースを読み取ることができます。
IU インテント更新 下位の階層に位置するすべてのリソースに対し、要求されているかかけられている更新ロックを保護します。
IU ロックはページ リソースに対してのみ使用します。
更新操作が発生すると、IU ロックは IX ロックに変換されます。
SIU 共有インテント更新 SロックとIUロックを個別にかけるか、同時にかけるかして組み合わせたものです。
たとえば、トランザクションで PAGLOCK ヒントを指定してクエリを実行してから更新操作を実行するとします。
PAGLOCK ヒントを指定したクエリでSロックをかけ、更新操作で IU ロックをかけます。
UIX 更新インテント排他 UロックとIXロックを個別にかけるか、同時にかけるかして組み合わせたものです。

当サイトのおすすめ記事

レンタルサーバー 1

当サイトは約5年間、さくらのレンタルサーバで運用させて頂きました。 何かトラブルがあったわけではないのですが、WordPressの表示速度を速くしたくてSSD搭載のレンタルサーバーで運用してみることに ...

プログラミング 2

SQLでIFを使わずに条件分岐する SQLでIFを書けばWHERE句の内容を変えて検索できますが、条件ごとに同じようなSQLを 複数回書くのは面倒なので、1行で分岐できないかと言う事でSQLを作って見 ...

SQLServer 3

SQLServerで発生するエラーコードをSQLで取得する SQLServerで発生したエラーコードの内容を メッセージが定義されているテーブルから取得します。 エラーコードを取得するSQL SQLs ...

4

SQLServerでテーブル型を戻り値とする関数を作る SQLServerではINT型やVARCHAR型などを返す関数と同様に ユーザー定義テーブル型を戻り値とする関数を作成できます。 テーブル型を戻 ...

5

アフィリエイトで即効成果を出す アフィリエイトで成果を出す、なかなか難しいですよね。 サイトをいくつも立ち上げてすでにコツをつかんでいる人なら チョチョイっとやっていけるんでしょうけど。 でも実際はこ ...

-SQL Server
-, , ,

Copyright© ソフトウェア開発日記 , 2017 AllRights Reserved.