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

公開日: : 最終更新日:2016/07/19 SQL Server , , ,

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ロックを個別にかけるか、同時にかけるかして組み合わせたものです。
スポンサーリンク
スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • 13 follow us in feedly

関連記事

SQLで文字列を反転させる

SQLで文字列を反転させる SQLで文字列を"012345"を後ろから並び変えて"543210"の

記事を読む

SQLServer

bcpコマンドを使ってBULK INSERT用のフォーマットファイルを出力する

bcpコマンドを使ってBULK INSERT用のフォーマットファイルを出力する bcpコマンドを使

記事を読む

ストアドプロシジャ内で例外エラーが発生した行番号を取得する。

例外エラーが発生した行番号を取得する SQLServerのストアドプロシジャ内で例外エラーが発

記事を読む

SQLServerで省略可能な引数を持ったストアドプロシージャを作る

SQLServerで省略可能な引数を持ったストアドプロシージャーを作ります。 省略可能にするに

記事を読む

SQLで文字列を3分割する

SQLで文字列を3分割する どうしてもSQLServerで特定の文字で文字列を3分割する必要が

記事を読む

SELECT INTOで既存テーブルのデータを新規テーブルにコピーする

既存テーブルのデータを新規テーブルにコピーします。 簡単だが結構忘れるのでメモします。

記事を読む

sp_columns – SQL Serverでカラムの型を取得する

SQL Serverで定義されているテーブルのカラムの型を取得する SQL Serverで定義され

記事を読む

SQLで日付範囲の重複をチェックする

SQLで日付範囲の重複をチェックする SQLで日付範囲の重複をチェックする必要が出たので調査しまし

記事を読む

テーブルから列を削除する「ALTER TABLE テーブル名 DROP COLUMN 削除する列名」

既存のテーブルから指定した列を削除する 既存のテーブルで不要になった列を削除する方法です。

記事を読む

NULLの検索はIS NULL演算子を使う

SQLでNULLのカラムを検索 SQLでNULLのカラムを検索するにはIS NULL 演算子を

記事を読む

SQLでビット演算を行う

SQLServerでのビット演算 SQLServerのT-SQLでビ

SQLServer
SQLServerで累積値(累積比)を求める

SQLServerで累積値(累積比)を求める SQLServer

SQL_VARIANT_PROPERTYを使ってカラムの基本データ型を取得する

カラムの基本データ型取得 SQLサーバーで定義されているテーブルのカ

SQL Server-ストアドプロシジャーのソースを表示する2

過去の投稿「SQL Server-ストアドプロシジャーのソースを表示す

SQLServer上にあるストアドプロシージャーの更新日時を取得する。

ストアドプロシージャーの更新日時を取得する ここ数日間で変更されたS

→もっと見る



PAGE TOP ↑