スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド
排他制御では,各々の排他資源に対して5種類の排他制御モードを用います。
排他制御では,排他資源の上位から下位へと順番に排他が掛けられます。排他を掛けていく途中で同一資源に対して,一つでもほかのトランザクションと同時実行できないトランザクションがある場合,そのトランザクションは待ち状態になります。また,上位から下位の資源へ排他を掛けていく途中にPRモード,又はEXモードがある場合,そのモードが掛かっている資源より下位の資源には排他が掛かりません。
同一資源に対して2ユーザが同じ処理をすると仮定したとき,排他制御モードの違いによって,同時に実行できたりできなかったりします。排他制御モードの違いによる2ユーザの同時実行性を次の表に示します。
モードの種類 | SR | PR | SU | PU | EX |
---|---|---|---|---|---|
SR | ○ | ○ | ○ | ○ | × |
PR | ○ | ○ | × | × | × |
SU | ○ | × | ○ | × | × |
PU | ○ | × | × | × | × |
EX | × | × | × | × | × |
2ユーザが同時に実行できない場合,一般にはトランザクションのコミット待ちになります。ほかのトランザクションのコミット待ちをしないでエラーリターンにする場合,SQL文にWITH ROLLBACK,又はNO WAITを指定します。
同一ユーザが同一資源に対して,異なる種類の排他制御のモードで二重,三重と次々に排他を掛けていくと,モードは強い方へと遷移していきます。
一度強いモードで排他を掛けてしまうと,後から弱いモードを掛けても,弱いモードへは遷移しません。例えば,行の更新をするときにEXで排他を掛けた場合,更新した行を参照するためにPRで排他を掛けたとしても,その行の排他制御のモードはEXのままです。
現在の排他制御のモードに対して,更に排他制御を掛けた場合のモードの遷移規則を次の表に示します。
後から掛けるモード | 現在のモード | ||||
---|---|---|---|---|---|
SR | PR | SU | PU | EX | |
SR | − | − | − | − | − |
PR | PR | − | PU | − | − |
SU | SU | PU | − | − | − |
EX | EX | EX | EX | EX | − |
排他制御は,SQL文の種類,及び実行環境によって,モードの組み合わせが異なります。
SQL文の種類,及び実行環境の違いによる排他制御のモードの組み合わせの代表例として行排他の場合を表3-10,表3-11に,ページ排他の場合を表3-12,表3-13に,インデクスキー値無排他の場合を表3-14,表3-15に示します。また,表を検査保留状態に設定する場合の排他を表3-16,表3-17に示します。
表3-10 排他制御のモードの組み合わせの代表例(行排他の場合)(1/2)
SQL文 | 資源 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
上位← →下位 | ||||||||||
インナレプリカ構成管理 ※6 |
レプリカグループ構成管理※8 | RDエリア | 表 | 表(NOWAIT検索) | ||||||
表用 | インデクス用 | 順序数生成子用 | 最終HiRDBファイル※5 | |||||||
検索 | NOWAIT指定 | SR | SR | SR | − | − | − | SR | ||
WITH SHARE指定 | SR | SR | SR | − | − | SR | − | |||
WITH EXCLUSIVE指定※1 | SR | SR | SU | SR | − | − | SU | − | ||
FOR UPDATE句指定※1 | SR | SR | SU | SR | − | − | SU | − | ||
上記以外 | SR | SR | SR | − | − | SR | − | |||
更新※1※12 | NEXT VALUE句指定 | SR | SU | SU | EX | SU | − | |||
上記以外 | SR | SU | − | EX | SU | − | ||||
追加※1 | NEXT VALUE句指定 | SR | SU | SU | EX | SU | − | |||
上記以外 | SR | SU | − | EX | SU | − | ||||
削除※1 | SR | SR | SU | − | − | − | ||||
LOCK文 | SHARE指定 ※11 |
SR | SR | SR | − | − | − | PR | − | |
EXCLUSIVE指定 | 非共用表 | SR | SR | SU | − | − | − | EX | − | |
共用表※11 | SR | SR | EX | − | − | − | EX | − | ||
表削除※2※13 | − | − | SU | − | − | EX | ||||
インデクス | 定義※13 | − | − | SU | − | − | EX | − | ||
削除※3※13 | − | − | SR ※10 |
SU | − | − | EX※4 | EX | ||
全行削除※2※13※14 | SR | SR | SU | − | − | EX | ||||
表定義変更※13 | SR※9 | SR※9 | SU※7 | − | − | EX | ||||
順序数生成子定義 | − | − | − | − | SU | − | − | − | ||
順序数生成子削除 | − | − | − | − | SU | − | − | − |
表3-11 排他制御のモードの組み合わせの代表例(行排他の場合)(2/2)
SQL文 | 資源 | ||||||||
---|---|---|---|---|---|---|---|---|---|
上位← →下位 | |||||||||
インデクス | インデクス情報ファイル※4 | 順序数生成子 | ページ | 行 | キー値 | 論理ファイル | |||
検索 | NOWAIT指定 | − | − | − | − | − | − | PR | |
WITH SHARE指定 | − | − | − | − | PR | PR | PR | ||
WITH EXCLUSIVE指定※1 | − | − | − | − | EX | PR | EX | ||
FOR UPDATE句指定※1 | − | − | − | − | EX | PR | EX | ||
上記以外 | − | − | − | − | PR | PR | PR | ||
更新※1※6 | NEXT VALUE句指定 | − | EX | SU | − | EX | EX | EX | |
上記以外 | − | EX | − | − | EX | EX | EX | ||
追加※1 | NEXT VALUE句指定 | − | EX | SU | − | EX | EX | EX | |
上記以外 | − | EX | − | − | EX | EX | EX | ||
削除※1 | − | − | − | − | − | EX | EX | ||
LOCK文 | SHARE指定※5 | − | − | − | − | − | − | − | |
EXCLUSIVE指定 | 非共用表 | − | − | − | − | − | − | − | |
共用表※5 | − | − | − | − | − | − | − | ||
表削除※2※7 | − | − | − | − | − | − | − | ||
インデクス | 定義※7 | − | − | − | − | − | − | − | |
削除※3※7 | EX | − | − | − | − | − | − | ||
全行削除※2※7 | − | − | − | − | − | − | − | ||
表定義変更※7 | − | − | − | − | − | − | − | ||
順序数生成子定義 | − | − | EX | − | − | − | − | ||
順序数生成子削除 | − | − | EX | − | − | − | − |
表3-12 排他制御のモードの組み合わせの代表例(ページ排他の場合)(1/2)
SQL文 | 資源 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
上位← →下位 | ||||||||||
インナレプリカ構成管理 ※6 |
レプリカグループ構成管理※8 | RDエリア | 表 | 表(NOWAIT検索) | ||||||
表用 | インデクス用 | 順序数生成子用 | 最終HiRDBファイル※5 | |||||||
検索 | NOWAIT指定 | SR | SR | SR | − | − | − | SR | ||
WITH SHARE指定 | SR | SR | SR | − | − | SR | − | |||
WITH EXCLUSIVE指定※1 | SR | SR | SU | SR | − | − | SU | − | ||
FOR UPDATE句指定※1 | SR | SR | SU | SR | − | − | SU | − | ||
上記以外 | SR | SR | SR | − | − | SR | − | |||
更新※1※12 | NEXT VALUE句指定 | SR | SR | SU | SU | EX | SU | − | ||
上記以外 | SR | SR | SU | − | EX | SU | − | |||
追加※1 | NEXT VALUE句指定 | SR | SR | SU | SU | EX | SU | − | ||
上記以外 | SR | SR | SU | − | EX | SU | − | |||
削除※1 | SR | SR | SU | − | − | SU | − | |||
LOCK文 | SHARE指定 ※11 |
SR | SR | SR | − | − | − | PR | − | |
EXCLUSIVE指定 | 非共用表 | SR | SR | SU | − | − | − | EX | − | |
共用表※11 | SR | SR | EX | − | − | − | EX | − | ||
表削除※2※13 | − | − | SU | − | − | EX | EX | |||
インデクス | 定義※13 | − | − | SU | − | − | EX | − | ||
削除※3※13 | − | − | SR ※10 |
SU | − | − | EX※4 | EX | ||
全行削除※2※13※14 | SR | SR | SU | − | − | EX | EX | |||
表定義変更※13 | SR※9 | SR※9 | SU※7 | − | − | EX | EX | |||
順序数生成子定義 | − | − | − | SU | − | − | − | |||
順序数生成子削除 | − | − | − | SU | − | − | − |
表3-13 排他制御のモードの組み合わせの代表例(ページ排他の場合)(2/2)
SQL文 | 資源 | ||||||||
---|---|---|---|---|---|---|---|---|---|
上位← →下位 | |||||||||
インデクス | インデクス情報ファイル※4 | 順序数生成子 | ページ | 行 | キー値 | 論理ファイル | |||
検索 | NOWAIT指定 | − | − | − | − | − | − | PR | |
WITH SHARE指定 | − | − | − | PR | − | PR | PR | ||
WITH EXCLUSIVE指定※1 | − | − | − | EX | − | PR | EX | ||
FOR UPDATE句指定※1 | − | − | − | EX | − | PR | EX | ||
上記以外 | − | − | − | PR | − | PR | PR | ||
更新※1※6 | NEXT VALUE句指定 | − | EX | SU | EX | − | EX | EX | |
上記以外 | − | EX | − | EX | − | EX | EX | ||
追加※1 | NEXT VALUE句指定 | − | EX | SU | EX | − | EX | EX | |
上記以外 | − | EX | − | EX | − | EX | EX | ||
削除※1 | − | − | − | EX | − | EX | EX | ||
LOCK文 | SHARE指定※5 | − | − | − | − | − | − | − | |
EXCLUSIVE指定 | 非共用表 | − | − | − | − | − | − | − | |
共用表※5 | − | − | − | − | − | − | − | ||
表削除※2※7 | − | − | − | − | − | − | − | ||
インデクス | 定義※7 | − | − | − | − | − | − | − | |
削除※3※7 | EX | − | − | − | − | − | − | ||
全行削除※2※7 | − | − | − | − | − | − | − | ||
表定義変更※7 | − | − | − | − | − | − | − | ||
順序数生成子定義 | − | − | EX | − | − | − | − | ||
順序数生成子削除 | − | − | EX | − | − | − | − |
表3-14 排他制御のモードの組み合わせの代表例(インデクスキー値無排他の場合)(1/2)
SQL文 | 資源 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
上位← →下位 | ||||||||||
インナレプリカ構成管理※5 | レプリカグループ構成管理※7 | RDエリア | 表 | 表(NOWAIT検索) | ||||||
表用 | インデクス用 | 順序数生成子用 | 最終HiRDBファイル※4 | |||||||
検索 | NOWAIT指定 | SR | SR | SR | − | − | − | SR | ||
WITH SHARE指定 | SR | SR | SR | − | − | SR | − | |||
WITH EXCLUSIVE指定※10 | SR | SR | SU | SR | − | − | SU | SU | ||
FOR UPDATE句指定※10 | SR | SR | SU | SR | − | − | SU | SU | ||
上記以外 | SR | SR | SR | − | − | SR | − | |||
更新※10※12 | NEXT VALUE句指定 | SR | SR | SU | SU | EX | SU | − | ||
上記以外 | SR | SR | SU | − | EX | SU | − | |||
追加※10 | NEXT VALUE句指定 | SR | SR | SU | SU | EX | SU | − | ||
上記以外 | SR | SR | SU | − | EX | SU | − | |||
削除※10 | SR | SR | SU | − | − | SU | − | |||
LOCK文 | SHARE指定 ※11 |
SR | SR | SR | − | − | − | PR | − | |
EXCLUSIVE指定 | 非共用表 | SR | SR | − | − | − | − | EX | − | |
共用表※11 | SR | SR | − | EX | − | − | EX | − | ||
表削除※1※13 | − | − | SU | − | − | EX | EX | |||
インデクス | 定義※13 | − | − | SU | − | − | EX | − | ||
削除※2※13 | − | − | SR ※9 |
− | − | − | EX※3 | EX | ||
全行削除※1※13※14 | SR | SR | SU | − | − | EX | EX | |||
表定義変更※13 | SR※8 | SR※8 | SU※6 | − | − | EX | EX | |||
順序数生成子定義 | − | − | − | SU | − | − | − | |||
順序数生成子削除 | − | − | − | SU | − | − | − |
表3-15 排他制御のモードの組み合わせの代表例(インデクスキー値無排他の場合)(2/2)
SQL文 | 資源 | ||||||||
---|---|---|---|---|---|---|---|---|---|
上位← →下位 | |||||||||
インデクス | インデクス情報ファイル※3 | 順序数生成子 | ページ | 行 | キー値 | 論理ファイル | |||
検索 | NOWAIT指定 | − | − | − | − | − | − | PR | |
WITH SHARE指定 | − | − | − | −,PR ※4 |
PR,− ※4 |
− | PR | ||
WITH EXCLUSIVE指定※6 | − | − | − | −,EX ※4 |
EX,− ※4 |
− | EX | ||
FOR UPDATE句指定※6 | − | − | − | −,EX ※4 |
EX,− ※4 |
− | EX | ||
上記以外 | − | − | − | −,PR ※4 |
PR,− ※4 |
− | PR | ||
更新※6※8 | NEXT VALUE句指定 | − | EX | SU | −,EX ※4※5 |
EX,− ※4※5 |
− | EX | |
上記以外 | − | EX | − | −,EX ※4※5 |
EX,− ※4※5 |
− | EX | ||
追加※6 | NEXT VALUE句指定 | − | EX | SU | −,EX ※4※5 |
EX,− ※4※5 |
− | EX | |
上記以外 | − | EX | − | −,EX ※4※5 |
EX,− ※4※5 |
− | EX | ||
削除※6 | − | − | − | −,EX ※4※5 |
EX,− ※4※5 |
− | EX | ||
LOCK文 | SHARE指定※7 | − | − | − | − | − | − | − | |
EXCLUSIVE指定 | 非共用表 | − | − | − | − | − | − | − | |
共用表※7 | − | − | − | − | − | − | − | ||
表削除※1※9 | − | − | − | − | − | − | − | ||
インデクス | 定義※9 | − | − | − | − | − | − | ||
削除※2※9 | EX | − | − | − | − | − | − | ||
全行削除※1※9 | − | − | − | − | − | − | − | ||
表定義変更※9 | − | − | − | − | − | − | − | ||
順序数生成子定義 | − | − | EX | − | − | − | − | ||
順序数生成子削除 | − | − | EX | − | − | − | − |
表3-16 排他制御のモードの組み合わせの代表例(検査保留状態に設定する場合)(1/2)
SQL文及び ユティリティ |
資源※1 | |||||
---|---|---|---|---|---|---|
上位← →下位 | ||||||
RDエリア | 表 | 表(NOWAIT検索) | ||||
表用※2 | インデクス用 | LOB用 | 最終HiRDBファイル | |||
全行削除※4 | SU | − | − | − | EX | EX |
表定義変更(分割格納条件変更) | SU | − | − | − | EX | EX |
データベース作成ユティリティ(pdload)※3 | SU | − | − | − | EX | EX |
データベース再編成ユティリティ(pdrorg)※3 | SU | − | − | − | EX | EX |
データベース構成変更ユティリティ(pdmod) | SU | − | − | − | EX | EX |
整合性チェックユティリティ(pdconstck)※3 | SU | − | − | − | EX | EX |
オンライン再編成の追い付き反映コマンド(pdorend)※3 | SU | − | − | − | EX | EX |
表3-17 排他制御のモードの組み合わせの代表例(検査保留状態に設定する場合)(2/2)
SQL文及び ユティリティ |
資源※1 | |||||
---|---|---|---|---|---|---|
上位← →下位 | ||||||
インデクス | インデクス情報ファイル | ページ | 行 | キー値 | 論理ファイル | |
全行削除 | − | − | − | − | − | − |
表定義変更(分割格納条件変更) | − | − | − | − | − | − |
データベース作成ユティリティ(pdload)※2 | − | − | − | − | − | − |
データベース再編成ユティリティ(pdrorg)※2 | − | − | − | − | − | − |
データベース構成変更ユティリティ(pdmod) | − | − | − | − | − | − |
整合性チェックユティリティ(pdconstck)※2 | − | − | − | − | − | − |
オンライン再編成の追い付き反映コマンド(pdorend)※2 | − | − | − | − | − | − |
CREATE TABLEにWITHOUT ROLLBACKオプションを指定した表の排他解除タイミングを表3-18〜表3-21に示します。
表3-18 CREATE TABLEにWITHOUT ROLLBACKオプションを指定した表の排他解除タイミング(インデクスが定義されていない場合(1/2))
SQL文 | 資源 | |||||||
---|---|---|---|---|---|---|---|---|
上位← →下位 | ||||||||
インナレプリカ構成管理※ | レプリカグループ構成管理※ | RDエリア | 表 | 表(NOWAIT検索) | ||||
表用 | インデクス用 | 最終HiRDBファイル | ||||||
検索 | NOWAIT指定 | × | × | × | − | − | − | × |
WITH SHARE指定 | × | × | × | − | − | × | − | |
WITH EXCLUSIVE指定 | × | × | × | − | − | × | − | |
FOR UPDATE句指定 | × | × | × | − | − | × | − | |
上記以外 | × | × | × | − | − | × | − | |
更新 | × | × | × | − | − | × | − | |
追加 | × | × | × | − | − | × | − | |
削除 | × | × | × | − | − | × | − | |
LOCK文 | SHARE指定 | × | × | × | − | − | × | − |
EXCLUSIVE指定 | × | × | × | − | − | × | − | |
表削除 | − | − | × | − | − | × | × | |
インデクス | 定義 | − | − | × | − | − | × | × |
削除 | − | − | × | − | − | × | × | |
全行削除 | × | × | × | − | − | × | × | |
表定義変更 | − | − | − | − | − | × | × |
表3-19 CREATE TABLEにWITHOUT ROLLBACKオプションを指定した表の排他解除タイミング(インデクスが定義されていない場合(2/2))
SQL文 | 資源 | ||||||
---|---|---|---|---|---|---|---|
上位← →下位 | |||||||
インデクス | インデクス情報ファイル | ページ | 行 | キー値 | 論理ファイル | ||
検索 | NOWAIT指定 | − | − | − | − | − | − |
WITH SHARE指定 | − | − | − | × | − | − | |
WITH EXCLUSIVE指定 | − | − | − | × | − | − | |
FOR UPDATE句指定 | − | − | − | × | − | − | |
上記以外 | − | − | − | × | − | − | |
更新 | − | − | − | ○ | − | − | |
追加 | − | − | − | ○ | − | − | |
削除 | − | − | − | ○ | − | − | |
LOCK文 | SHARE指定 | − | − | − | − | − | − |
EXCLUSIVE指定 | − | − | − | − | − | − | |
表削除 | − | − | − | − | − | − | |
インデクス | 定義 | − | − | − | − | − | − |
削除 | − | − | − | − | − | − | |
全行削除 | − | − | − | − | − | − | |
表定義変更 | − | − | − | − | − | − |
表3-20 CREATE TABLEにWITHOUT ROLLBACKオプションを指定した表の排他解除タイミング(インデクスが定義されている場合(1/2))
SQL文 | 資源 | |||||||
---|---|---|---|---|---|---|---|---|
上位← →下位 | ||||||||
インナレプリカ構成管理※ | レプリカグループ構成管理※ | RDエリア | 表 | 表(NOWAIT検索) | ||||
表用 | インデクス用 | 最終HiRDBファイル | ||||||
検索 | NOWAIT指定 | × | × | × | × | − | − | × |
WITH SHARE指定 | × | × | × | × | − | × | − | |
WITH EXCLUSIVE指定 | × | × | × | × | − | × | − | |
FOR UPDATE句指定 | × | × | × | × | − | × | − | |
上記以外 | × | × | × | × | − | × | − | |
更新 | × | × | × | × | − | × | − | |
追加 | × | × | × | × | − | × | − | |
削除 | × | × | × | × | − | × | − | |
LOCK文 | SHARE指定 | × | × | × | × | − | × | − |
EXCLUSIVE指定 | × | × | × | × | − | × | − | |
表削除 | − | − | × | × | − | × | × | |
インデクス | 定義 | − | − | × | × | − | × | × |
削除 | − | − | × | × | − | × | × | |
全行削除 | × | × | × | × | − | × | × | |
表定義変更 | − | − | − | × | − | × | × |
表3-21 CREATE TABLEにWITHOUT ROLLBACKオプションを指定した表の排他解除タイミング(インデクスが定義されている場合(2/2))
SQL文 | 資源 | ||||||
---|---|---|---|---|---|---|---|
上位← →下位 | |||||||
インデクス | インデクス情報ファイル | ページ | 行 | キー値 | 論理ファイル | ||
検索 | NOWAIT指定 | − | − | − | − | − | − |
WITH SHARE指定 | − | − | − | × | −※1 | − | |
WITH EXCLUSIVE指定 | − | − | − | × | −※1 | − | |
FOR UPDATE句指定 | − | − | − | × | −※1 | − | |
上記以外 | − | − | − | × | −※1 | − | |
更新 | − | − | − | ○ | −※2 | − | |
追加 | − | − | − | ○ | −※3 | − | |
削除 | − | − | − | ○ | −※3 | − | |
LOCK文 | SHARE指定 | − | − | − | − | − | − |
EXCLUSIVE指定 | − | − | − | − | − | − | |
表削除 | − | − | − | − | − | − | |
インデクス | 定義 | − | − | − | − | − | − |
削除 | − | − | − | − | − | − | |
全行削除 | − | − | − | − | − | − | |
表定義変更 | − | − | − | − | − | − |
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.