[DB][DB2] Lock Modes

■ロックモード
排他制御する為の ロックの性質。
ISOLATION(分離レベル)とアクセス・パス(処理内容)で決まる。

ざっくりロック
-共有ロック(S/ Shared):照会処理時に取得されるロック
-排他ロック(X/ Exclusive):更新処理時に取得されるロック

ざっくり互換
  ・共有ロック←共有ロック : 互換(待たない)
  ・共有ロック←排他ロック : 非互換(相手のロック解放を待つ)
  ・排他ロック←共有ロック : 非互換(相手のロック解放を待つ)
  ・排他ロック←排他ロック : 非互換(相手のロック解放を待つ)
Sロック同士は互換性がある。
※更新された場合には、
 ISOLATIONレベルに関係なく、Xロックが取得され、
 COMMITされるまで保持される。

全部で11モード
排他性 低
IN (照会系)
IS (照会系)
NS (照会系)
S (照会系)
IX (更新系)
SIX (更新系)
U (更新系)
NW (更新系)
X (更新系)
W (更新系)
Z (更新系)
排他性 高


--------------------------------------------------
■ロックモード
適用出来るオブジェクトタイプ
説明

※モード (ロックの状態)
ロックの所有者に許可されるアクセスの種類
ロックの対象の並行ユーザに許可されるアクセスの種類

※オブジェクト
ロックするリソース
明示的にロック出来るオブジェクトの唯一のタイプは表
データベースマネージャーでは 行/表/表スペース等 他のタイプのリソースにもロック掛けられる

※期間
照会が実行される分離レベルは ロック期間に影響する

※互換性
ロックが取得されているDBオブジェクトに、別アプリからもロックの取得が可能である時、
それらのロック・モードは、"互換性がある"という。


--------------------------------------------------
IN / Intent None
表スペース/ブロック/表
意図的なし

The lock owner can read any data in the table, including uncommitted data, but cannot change any of it. No row locks are acquired by the lock owner. Other concurrent applications can read or update the table. Both table spaces and tables can be locked in this mode.

ロックの所有者は、非コミット・データを含め、オブジェクト内の全てのデータを読み取れるが、更新は出来ない。
同時に実行される他のアプリは、その表を読み取ったり更新したりできる。

このモードで表ロックが取得された時の同一トランザクションからの行ロック
→行ロックは取得しない

このモードでロックが取得されるケース
URで照会時の表ロック


--------------------------------------------------
IS / Intent Share
表スペース/ブロック/表
意図的シェアロック

The lock owner can read data in the locked table, but not change this data. When an application holds the IS table lock, the application acquires an S or NS lock on each row read. In either case, other applications can read or update the table. Both table spaces and tables can be locked in this mode.

ロック所有者は、ロックされている表のデータを読み取れるが、更新は出来ない。
他のアプリは、その表を読み取ったり更新したり出来る。

このモードで表ロックが取得された時の同一トランザクションからの行ロック
→行ロックは取得しない

このモードでロックが取得されるケース
→RR/RS/CSで照会時の表ロック


--------------------------------------------------
NS / Next Key Share

ネクストキーシェアロック

This lock is acquired on rows of a table, instead of a Share lock. The lock owner and all concurrent applications can read, but not change, the locked row. Only individual rows can be locked in NS mode. This lock is acquired in place of a share (S) lock on data that is read with the RS or CS isolation levels.
 
ロック所有者と全ての並行アプリは、ロックされた行を読み取れるが、更新は出来ない。
このロックは、Sロックの代わりに、表の行に対して獲得される。
この場合、アプリの分離レベルは、RSかCSのいずれか。
NSロック・モードは、ネクスト・キー・ロッキングには使用されない。
このモードは、これらのスキャンにおける次のキー・ロッキングの影響を最小化するためにCSとRSスキャンの際にSモードの代わりに使用される。

このモードでロックが取得されるケース
→RS/CSで照会時の行ロック


--------------------------------------------------
■S / Share
行/ブロック/表
シェアロック

The lock owner and any concurrent applications can read, but not change, the locked data. Individual rows can be Share locked. If a table is Share locked, no row locks are acquired by the lock owner. Other concurrent applications can read the table. Both rows and tables can be locked in this mode.

ロック所有者と全ての並行アプリは、ロックされたデータを読み取れるが、更新は出来ない。

このモードで表ロックが取得された時の同一トランザクションからの行ロック
→行ロックは取得しない

このモードでロックが取得されるケース
→RRで照会時の行ロック
 表単位でロックが取得される場合の、照会時の表ロック


--------------------------------------------------
IX / Intent Exclusive
表スペース/ブロック/表
意図的排他ロック

The lock owner and concurrent applications can read and change data in the table. When the owner reads data, it acquires an S, NS, X, or U lock on each row. It also acquires an X lock on each row that it updates. Other concurrent applications can both read and update the table. Both table spaces and tables can be locked in this mode.

ロック所有者と同時に実行されるアプリとは、データを読み取ったり更新したり出来る。
同時に実行される他のアプリは、その表を読み取ったり更新したりできる。

このモードで表ロックが取得された時の同一トランザクションからの行ロック
→照会行にS/NS/U
 更新行にX

このモードでロックが取得されるケース
→更新時の照会時の表ロック
 FOR UPDATEカーソルでの照会時の表ロック


--------------------------------------------------
SIX / Share with Intent Exclusive
表/ブロック
意図的排他ロックを伴うシェア

The lock owner can both read and change data in the table. The lock owner acquires X locks on the rows it updates, but does not acquire locks on rows that it reads. Other concurrent applications can read the table. Only a table object can be locked in this mode.

ロック所有者は、データを読み取ったり更新したりできる。
同時に実行される他のアプリは、その表を読み取れる。

このモードで表ロックが取得された時の同一トランザクションからの行ロック
→照会行にロックなし
 更新行にX行ロック

このモードでロックが取得されるケース
→同一トランザクション内で、
 既にSを取得している時にIXロックの取得要求が発生した場合の表ロック
 既にIXを取得している表にSロックの取得要求が発生した場合の表ロック


--------------------------------------------------
U / Update
行/ブロック/表
更新ロック

The lock owner can update data in the locked object and acquire X locks on the rows prior to updates. Other units of work can read the data, but cannot attempt to update it. Both rows and tables can be locked in this mode. When a table is locked in U mode, X row locks are obtained.

ロック所有者は、データを更新出来る。
他の作業単位はロックされたオブジェクトのデータを読み取れるが、更新は出来ない。

このモードで表ロックが取得された時の同一トランザクションからの行ロック
→行ロックは取得しない

このモードでロックが取得されるケース
→FOR UPDATEカーソルで照会時の行または表ロック(更新時にはXロックに変わる)
 表単位でのロックが取得される場合の、FOR UPDATEカーソルで照会処理時の表ロック


--------------------------------------------------
NX / Next Key Exclusive
次キー排他ロック

This lock is acquired on the next row when a row is deleted from an index or inserted into the index of a table. The lock owner can read but not change the locked row. Only individual rows can be locked in NX mode. This is similar to an X lock except that it is compatible with the NS lock.


--------------------------------------------------
NW / Next Key Weak Exclusive

ネクストキー弱排他ロック

This lock is acquired on the next row when a row is inserted into the index of a non-catalog table. The lock owner can read but not change the locked row. Only individual rows can be locked in NW mode. This is similar to X and NX locks except that it is compatible with the W and NS locks.

行が索引に挿入されるとき、NWロックが次の行に獲得される。
タイプ2索引の場合、次の行が現在RRスキャンでロックされている場合にのみ、これが発生する。
ロック所有者は、ロックされた行を読み取れるが更新は出来ない。
このロック・モードは、WとNSロックと互換性があるのを除けば、Xロックと類似した動きをする。

このモードでロックが取得されるケース
→索引のある表にINSERTした行の、次の行に保持される、瞬間的なロック
 タイプ2索引では、次の行がRRスキャンのアプリにロックを保持されている場合にNWを取得する。


--------------------------------------------------
■X / Exclusive
行/ブロック/表/バッファ・プール
排他ロック

The lock owner can both read and change data in the locked object. Tables can be Exclusive locked, meaning that no row locks will be acquired. Only uncommitted read applications can access the locked table. Both rows and tables can be locked in this mode.

1ロック所有者は、ロックされたオブジェクトのデータを読み取ったり更新したりできる。
1ロックされたオブジェクトにアクセス出来るのは、非コミット読み取りアプリだけ。

このモードで表ロックが取得された時の同一トランザクションからの行ロック
→行ロックは取得しない

このモードでロックが取得されるケース
→更新時の行ロック
 表単位でロックが取得される場合の、更新時の表ロック


--------------------------------------------------
■W / Weak Exclusive

弱排他ロック

This lock is acquired on the row when a row is inserted into a non-catalog table. The lock owner can change the locked row. Only individual rows are locked in W mode. This lock is similar to an X lock except that it is compatible with the NW lock. Only uncommitted read applications can access the locked row.

タイプ2索引が定義されていない表に行を挿入する時に、その行に対して獲得される。
ロック所有者は、ロックされた行を変更出来る。
重複値がコミットされたかどうかを判別するために、ユニーク索引に挿入中にもこのロックが使用される。
このロックはNWロックと互換性あるのを除けば、Xロックと類似した動きをする。
ロックされた行にアクセス出来るのは、非コミット読み取りアプリのみ。

このモードでロックが取得されるケース
→タイプ2索引が作成されていない表の索引にINSERTした時の行ロック


--------------------------------------------------
■Z / Superxclusive
表スペース/表
スーパー排他ロック

This lock is acquired on a table in certain conditions, such as when the table is altered or dropped, an index on the table is created or dropped, or a table is reorganized. No other concurrent application can read or update the table. Both table space and table objects can be locked in this mode.

以下のような特定の状況に表上で獲得される。
-表が更新かドロップされる時
-表の索引が作成かドロップされる時
-表の一部のタイプが再編成される時
同時に実行される他のアプリは、その表を読み取ったり更新したり出来ない。

このモードでロックが取得されるケース
→表のALTER/DROP/REORG、索引のCREATE/DROP等で取得されるロック


--------------------------------------------------


■ロック・タイプの互換性
互換性有=他ロックを待たない
互換性無=他ロックの開放を待つ

【NONE】 NONE/○ IN/○ IS/○ NS/○ S/○  IX/○ SIX/○ U/○ NX/○ X/○ Z/○ NW/○
IN】   NONE/○ IN/○ IS/○ NS/○ S/○  IX/○ SIX/○ U/○ NX/○ X/○ Z/待 NW/○
【IS】   NONE/○ IN/○ IS/○ NS/○ S/○  IX/○ SIX/○ U/○ NX/待 X/待 Z/待 NW/待
【NS】  NONE/○ IN/○ IS/○ NS/○ S/○  IX/待 SIX/待 U/○ NX/○ X/待 Z/待 NW/○
【S】   NONE/○ IN/○ IS/○ NS/○ S/○  IX/待 SIX/待 U/○ NX/待 X/待 Z/待 NW/待

【IX】   NONE/○ IN/○ IS/○ NS/待 S/待  IX/○ SIX/待 U/待 NX/待 X/待 Z/待 NW/待
【SIX】  NONE/○ IN/○ IS/○ NS/待 S/待  IX/待 SIX/待 U/待 NX/待 X/待 Z/待 NW/待
【U】   NONE/○ IN/○ IS/○ NS/○ S/○  IX/待 SIX/待 U/待 NX/待 X/待 Z/待 NW/待
【NX】  NONE/○ IN/○ IS/待 NS/○ S/待  IX/待 SIX/待 U/待 NX/待 X/待 Z/待 NW/待
【X】   NONE/○ IN/○ IS/待 NS/待 S/待  IX/待 SIX/待 U/待 NX/待 X/待 Z/待 NW/待
【Z】   NONE/○ IN/待 IS/待 NS/待 S/待  IX/待 SIX/待 U/待 NX/待 X/待 Z/待 NW/待
【NW】  NONE/○ IN/○ IS/待 NS/○ S/待  IX/待 SIX/待 U/待 NX/待 X/待 Z/待 NW/○
【W】   NONE/○ IN/○ IS/待 NS/○ S/待  IX/待 SIX/待 U/待 NX/待 X/待 Z/○ NW/待


■アクセスパス別ロックモード
□読み取りのみのSELECT
 FOR READ ONLY / FOR FETCH ONLY が指定されているか、
 BIND / PREP で BLOCKING ALL が指定されている場合には、
 S / NS / IS を取得する。
□更新意図のあるSELECT
 FOR UPDATE 付きの SELECT や、
 コンパイラが更新意図を含む曖昧なカーソルと判断した場合には、
 行に S / U / X、
 ブロックに IX / U / X / S、
 表に IX / U / X を取得する。
□更新処理
 UPDATE / INSERT / DELETE (WHERE CURRENT OF を含まない)の場合、
 X / IX を取得する。
□カーソル指定の更新処理
 UPDATE WHERE CURRENT OF / DELETE WHERE CURRENT OF の場合、
 X / IX を取得する。


■索引スキャンのロックモード
□条件節なしの索引スキャン
RR
 Read-Only(照会時): S (表)
 Intent to change(FOR UPDATE付カーソルでの照会時): IX (表) / S (行)
 UPDATE/DELETE内で行われる照会時: X (表)
RS
 Read-Only(照会時): IS (表) / NS (行)
 Intent to change(FOR UPDATE付カーソルでの照会時): IX (表) / U (行)
 UPDATE/DELETE内で行われる照会時: IX (表) / X (行)
CS
 Read-Only(照会時): IS (表) / NS (行)
 Intent to change(FOR UPDATE付カーソルでの照会時): IX (表) / U (行)
 UPDATE/DELETE内で行われる照会時: IX (表) / X (行)
UR
 Read-Only(照会時): IN (表)
 Intent to change(FOR UPDATE付カーソルでの照会時): IX (表) / U (行)
 UPDATE/DELETE内で行われる照会時: IX (表) / X (行)

□1行のみヒットする索引スキャン
RR
 Read-Only(照会時): S (表)
 Intent to change(FOR UPDATE付カーソルでの照会時): IX (表) / S (行)
 UPDATE/DELETE内で行われる照会時: X (表)
RS
 Read-Only(照会時): IS (表) / NS (行)
 Intent to change(FOR UPDATE付カーソルでの照会時): IX (表) / U (行)
 UPDATE/DELETE内で行われる照会時: IX (表) / X (行)
CS
 Read-Only(照会時): IS (表) / NS (行)
 Intent to change(FOR UPDATE付カーソルでの照会時): IX (表) / U (行)
 UPDATE/DELETE内で行われる照会時: IX (表) / X (行)
UR
 Read-Only(照会時): IN (表)
 Intent to change(FOR UPDATE付カーソルでの照会時): IX (表) / U (行)
 UPDATE/DELETE内で行われる照会時: IX (表) / X (行)

□範囲指定の条件節のみの索引スキャン
RR
 Read-Only(照会時): IS (表) / S (行)
 Intent to change(FOR UPDATE付カーソルでの照会時): IX (表) / S (行)
 UPDATE/DELETE内で行われる照会時: IX (表) / X (行)
RS
 Read-Only(照会時): IS (表) / NS (行)
 Intent to change(FOR UPDATE付カーソルでの照会時): IX (表) / U (行)
 UPDATE/DELETE内で行われる照会時: IX (表) / X (行)
CS
 Read-Only(照会時): IS (表) / NS (行)
 Intent to change(FOR UPDATE付カーソルでの照会時): IX (表) / U (行)
 UPDATE/DELETE内で行われる照会時: IX (表) / X (行)
UR
 Read-Only(照会時): IN (表)
 Intent to change(FOR UPDATE付カーソルでの照会時): IX (表) / U (行)
 UPDATE/DELETE内で行われる照会時: IX (表) / X (行)

□条件節ありの索引スキャン
RR
 Read-Only(照会時): IS (表) / S (行)
 Intent to change(FOR UPDATE付カーソルでの照会時): IX (表) / S (行)
 UPDATE/DELETE内で行われる照会時: IX (表) / S (表)
RS
 Read-Only(照会時): IS (表) / NS (行)
 Intent to change(FOR UPDATE付カーソルでの照会時): IX (表) / U (行)
 UPDATE/DELETE内で行われる照会時: IX (表) / U (行)
CS
 Read-Only(照会時): IS (表) / NS (行)
 Intent to change(FOR UPDATE付カーソルでの照会時): IX (表) / U (行)
 UPDATE/DELETE内で行われる照会時: IX (表) / U (行)
UR
 Read-Only(照会時): IN (表)
 Intent to change(FOR UPDATE付カーソルでの照会時): IX (表) / U (行)
 UPDATE/DELETE内で行われる照会時: IX (表) / U (行)




ref:
DB2 ロック属性
http://typea.dip.jp/tips/wiki.cgi?action=PDF&page=DB2+%A5%ED%A5%C3%A5%AF%C2%B0%C0%AD
Administration Guide
http://os2ports.com/docs/DB2/db2d0/db2d082.htm
DB2 V9.1 デザインガイド:ロック -基礎編-
http://www-06.ibm.com/jp/domino01/mkt/dminfo.nsf/doc/002B07B2

tag : BD2 IN IS NS S IX SIX NX U NW

2009-04-13 22:19 : 開発 : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud