「テーブルのロック状態を取得する方法(SQL Server)」の版間の差分
ナビゲーションに移動
検索に移動
(→ロックの種類) |
|||
(同じ利用者による、間の3版が非表示) | |||
5行目: | 5行目: | ||
== ロック状態を取得するSQL文 == | == ロック状態を取得するSQL文 == | ||
ロック状態を取得するには、以下のSQL文を実行すれば取得できる。<br> | ロック状態を取得するには、以下のSQL文を実行すれば取得できる。<br> | ||
< | <syntaxhighlight lang="sql"> | ||
SELECT resource_type AS type, resource_associated_entity_id as entity_id, | SELECT resource_type AS type, | ||
resource_associated_entity_id as entity_id, | |||
(CASE WHEN resource_type = 'OBJECT' THEN | (CASE WHEN resource_type = 'OBJECT' THEN | ||
OBJECT_NAME( resource_associated_entity_id ) | OBJECT_NAME( resource_associated_entity_id ) | ||
22行目: | 23行目: | ||
ORDER BY | ORDER BY | ||
request_session_id | request_session_id | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
実行結果の例 | 実行結果の例 | ||
57行目: | 58行目: | ||
</center> | </center> | ||
<br><br> | <br><br> | ||
{{#seo: | |||
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | |||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 | |||
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux | |||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |||
}} | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:SQL_Server]] | [[カテゴリ:SQL_Server]] |
2024年11月10日 (日) 16:02時点における最新版
概要
SQL Serverにおいて、テーブルのロック状態を調べるSQL文を記載する。
ロック状態を取得するSQL文
ロック状態を取得するには、以下のSQL文を実行すれば取得できる。
SELECT resource_type AS type,
resource_associated_entity_id as entity_id,
(CASE WHEN resource_type = 'OBJECT' THEN
OBJECT_NAME( resource_associated_entity_id )
ELSE
(SELECT OBJECT_NAME( OBJECT_ID ) FROM sys.partitions WHERE hobt_id=resource_associated_entity_id)
END) AS object_name,
request_mode AS request_mode,
request_type AS request_type,
request_status AS request_status,
request_session_id AS session_id
FROM
sys.dm_tran_locks
WHERE
resource_type <> 'DATABASE'
ORDER BY
request_session_id
実行結果の例 type entity_id object_name mode type status session_id OBJECT 90123845 test_table IS LOCK GRANT 51
ロックの種類
ロックの種類を、下表に示す。
ロックのモード | ロックの種類 | 説明 |
---|---|---|
S | 共有ロック | 他のトランザクションからの読込は可能で、更新は不可となる。 |
X | 排他ロック | 他のトランザクションからの読込・更新が共に不可となる。 INSERT、UPDATE、DELETEを実行するとこのロックになる。 |
U | 更新ロック | 他のトランザクションからの読込は可能で、更新は不可となる。 SELECTでWITH(UPDLOCK)を指定するとこのロックになる。 |
IS | インテント共有 | 下位の階層に位置するリソースの一部に対し、 要求されているかかけられている共有ロックを保護する。 |
IX | インテント排他 | 下位の階層に位置するリソースの一部に対し、 要求されているかかけられている排他ロックを保護する。 IXはISのスーパーセットであり、下位のリソースに対する共有ロックの要求を保護する。 |
SIX | インテント排他の共有 | 下位の階層に位置するすべてのリソースに対し、 要求されているか掛けられている共有ロックを保護し、下位のリソースの一部のインテント排他ロックを保護する。 上位リソースで同時実行しているISロックは可能である。 例えば、テーブルに対しSIXロックを掛けると、変更中のページにインテント排他ロックが、 変更中の行に排他ロックが掛かる。 1つのリソースに対しては、1度に1つのSIXロックしか掛けられない。 その結果、他のトランザクションによってリソースが更新されることはなくなるが、 他のトランザクションはテーブルレベルのISロックをかけることで下位のリソースを読み取ることができる。 |
IU | インテント更新 | 下位の階層に位置するすべてのリソースに対し、要求されているかかけられている更新ロックを保護する。 IUロックはページリソースに対してのみ使用する。 更新操作が発生すると、IUロックはIXロックに変換される。 |
SIU | 共有インテント更新 | SロックとIUロックを個別に掛けるか、同時に掛けるかして組み合わせたものである。 例えば、トランザクションでPAGLOCKヒントを指定してクエリを実行してから更新操作を実行する場合、 PAGLOCKヒントを指定したクエリでSロックを掛け、更新操作でIUロックを掛ける。 |
UIX | 更新インテント排他 | UロックとIXロックを個別に掛けるか、同時に掛けるかして組み合わせたものである。 |