Hitachi

ノンストップデータベース HiRDB Version 10 構造型データベース機能


2.9.2 排他制御のモード

排他制御では,ルートレコード型,ページなどのそれぞれの排他資源に対して,次に示す5種類の排他制御モードがあります。

  1. 共用モードPRモードProtected Retrieve)

    排他資源の参照だけが許されるモードです。ほかのトランザクションによる参照を許します。

  2. 排他モードEXモードExclusive)

    1つのトランザクションだけが排他資源を占有するモードです。ほかのトランザクションによる排他資源の参照,追加,更新および削除を許しません。

  3. 意図共用モードSRモードShared Retrieve)

    排他資源の参照だけが許されるモードです。ほかのトランザクションによる排他資源の参照,追加,更新および削除を許します(ただし,排他資源がページの場合は参照だけを許します)。

  4. 意図排他モードSUモードShared Update)

    排他資源の参照,追加,更新および削除が許されるモードです。ほかのトランザクションによる排他資源の参照,追加,更新および削除を許します。

  5. 共用意図排他モードPUモードProtected Update)

    排他資源の参照,および更新が許されるモードです。ほかのトランザクションによる排他資源の参照だけを許します。

同一資源に対して2つのトランザクションが同時に排他を掛ける場合,排他制御モードによって,トランザクションを同時に実行できたりできなかったりします。排他制御モードとトランザクションの同時実行性を次の表に示します。

表2‒33 排他制御モードとトランザクションの同時実行性

排他制御モード

SR

PR

SU

PU

EX

SR

×

PR

×

×

×

SU

×

×

×

PU

×

×

×

×

EX

×

×

×

×

×

(凡例)

○:同時に実行できる。

×:同時に実行できない。

2つのトランザクションが同時に実行できない場合,一般的に,一方のトランザクションがもう一方のトランザクションの終了待ちとなります。

〈この項の構成〉

(1) 排他制御モードの遷移

同一トランザクションが同一資源に対して,異なる種類の排他制御モードで二重,三重に排他を掛けていくと,排他制御モードは強い方へと遷移していきます。例えば,一度,EXモードで排他を掛けると,後からPRモードで排他を掛けても,その資源はEXモードのままであり,PRモードにはなりません。

現在の排他制御モードに対して,さらに排他制御を掛けた場合の排他制御モードの遷移規則を次の表に示します。

表2‒34 排他制御モードの遷移規則

後から掛ける排他制御モード

現在の排他制御モード

SR

PR

SU

EX

PU

SR

PR

PR

PU

SU

SU

PU

EX

EX

EX

EX

EX

PU

PU

PU

PU

(凡例)

−:排他制御モードは遷移しません。

−以外:遷移後の排他制御モードを表します。

注※

排他制御モード遷移の結果として,PUモードになることがあります。このモードはSRモードとだけ同時実行できます。

詳細については,マニュアル「HiRDB UAP開発ガイド」の「モードの遷移」も参照してください。

(2) 排他制御モードの組み合わせ

排他制御は,実行するAPIまたはDMLの種類,および実行条件などによって,モードの組み合わせが異なります。

実行するAPIまたはDMLの種類,および実行環境の違いによる排他制御のモードの組み合わせの例を説明します。

参考
  • SDBデータベースを操作するAPIについては,マニュアル「TP1/Financial Service Platform プログラム作成の手引」を参照してください。

  • DMLについては,「17. DMLリファレンス【SD FMB】」を参照してください。

表2‒35 排他制御のモードの組み合わせの例(4V FMBのSDBデータベースの場合)

[図データ]

[図データ]

(凡例)と表中の※の説明は,「表2-37 排他制御のモードの組み合わせの例(SD FMBのSDBデータベースの場合)」の後ろで説明しています。

表2‒36 排他制御のモードの組み合わせの例(4V AFMのSDBデータベースの場合)

[図データ]

(凡例)と表中の※の説明は,「表2-37 排他制御のモードの組み合わせの例(SD FMBのSDBデータベースの場合)」の後ろで説明しています。

表2‒37 排他制御のモードの組み合わせの例(SD FMBのSDBデータベースの場合)

[図データ]

[図データ]

[図データ]

(凡例)

PU:共用意図排他モード

EX:排他モード

SR:意図共用モード

SU:意図排他モード

−:排他を掛けないことを示します。または,該当しません。

注※1

インナレプリカ機能使用時の最上位排他資源は,インナレプリカ構成管理情報,またはレプリカグループ構成管理情報となります。これらの排他資源を管理することで,インナレプリカ機能に関連する運用コマンドやユティリティとUAPの同時実行を抑止します。

インナレプリカ機能を使用しない場合,UAPを実行しても,インナレプリカ構成管理とレプリカグループ構成管理には排他を掛けません。

インナレプリカ機能を使用する場合,次に示す条件のうち,どちらかを満たすと,UAP実行時に排他を掛ける範囲が小さくなります。

UAP実行時の排他の単位が小さくなる条件
  • システム共通定義のpd_inner_replica_lock_shiftオペランドにYを指定する。

  • システム共通定義のpd_inner_replica_lock_shiftオペランドにNを指定(インナレプリカ機能の同時実行性を向上させない指定)し,かつ運用コマンドやユティリティが動作中である。

排他を掛ける範囲が小さくなった場合の排他範囲
  • インナレプリカ構成管理単位ではなく,レプリカグループ構成管理単位になる。

  • サーバ単位ではなく,インナレプリカグループ単位になる。

詳細については,マニュアル「HiRDB システム定義」のpd_inner_replica_lock_shiftオペランドの説明を参照してください。

注※2

更新ログ取得方式がログレスモード指定の場合,SUモードはEXモードの排他になります。

注※3

インデクスの一意性を保証するためにHiRDB/SDが内部的に行に排他を掛けます。

注※4

SDBデータベースを操作するAPIで指定する排他モード1

'S':共用モード

'E':排他モード

'O':占有モード

'N':無排他モード

注※5

SDBデータベースを操作するAPIで指定するアクセスモード1

'R':参照モード

'U':更新モード

注※6

SDBデータベースを操作するAPIで指定するポインタオプション

'U':親レコードのUSERポインタに対象レコードの格納位置を設定します。

'C':親レコードのUSERポインタの設定を解除します。

注※7

自身がルートレコードの場合,またはルートレコードの格納ページと同一の場合は,EXモードになります。

注※8

親レコードの格納ページが,対象レコードの格納ページと同一の場合は,EXモードになります。

注※9

シーケンシャルインデクスの一意性を保証するために,排他を掛けます。

注※10

PRIORレコード(格納するレコードのPRIORポインタに接続されるレコード)がルートレコードの場合,またはPRIORレコードの格納ページがルートレコードか対象レコードの格納ページと同一の場合は,EXモードになります。

注※11

NEXTレコード(格納するレコードのNEXTポインタに接続されるレコード)がルートレコードの場合,またはNEXTレコードの格納ページがルートレコードか対象レコードの格納ページと同一の場合は,EXモードになります。

注※12

SDBデータベースを操作するAPIで指定する一括オプション

'O':最下位レベルのレコードについて,すべてのレコードを削除します。

'S':削除対象のレコードが,最下位レベルのときは位置づけしているレコードだけを削除します。削除対象のレコードが最下位レベルでないときは,位置づけしているレコードとその下位レベルのレコードを削除します。

注※13

対象となるレコード型に二次インデクスが定義されている場合だけ排他を掛けます。ただし,レコードの検索で,検索に二次インデクスを使用しない場合は排他を掛けません。また,排他資源が行の場合,追加または削除対象のレコードに関する排他を掛けます。

注※14

操作対象レコードのレコード型の,SDBデータベース格納定義のOCCURRENCE NUMBER句の指定値が0の場合は,SDBデータベースを操作するAPIで指定する排他モード1の指定によって,次のように排他制御モードが変更になります。

  • 排他モード1の指定が'E'の場合:PUモード

  • 排他モード1の指定が'O'の場合:EXモード

注※15

同一データベースキー値のレコードが1件も格納されていない場合,仮想ルートレコードを追加したあと,子レコードを追加します。ただし,レコードの削除によって当該データベースキー値を持つ子レコードが0件となる場合は,仮想ルートレコードは削除されないため,そのあとに実行する1件目のレコードの格納は該当しません。

注※16

シーケンシャルインデクス,および二次インデクスの一意性を保証するために,排他を掛けます。ただし,二次インデクスについては,対象となるレコード型に二次インデクスが定義されている場合だけ,排他を掛けます。

注※17

PRIORレコードの格納ページが,対象レコードの格納ページと同一の場合はEXモードになります。

注※18

NEXTレコードの格納ページが,対象レコードの格納ページと同一の場合はEXモードになります。なお,4V AFMのSDBデータベースは最後方への追加だけのため,NEXTレコードは必ずルートレコードとなります。

注※19

一括削除後のレコードの格納は,削除前の一連番号の最大値に達するまでは,内部的にレコードの更新(MODIFY)と同等の変更処理に置き換わります。

注※20

対象レコードの格納ページと同一の場合は,EXモードになります。

注※21

検索対象となるレコードに,ルートレコードが含まれる場合が対象となります。

注※22

検索対象となるレコードに,ルートレコードが含まれない場合が対象となります。

注※23

次に示すどちらかの場合は,HiRDB/SDが内部的にシーケンシャルインデクスを更新するため,SUモードで排他を掛けます。

  • レコードの削除,またはレコードの一括削除によって,当該データベースキー値を持つ子レコードが0件となったあとに実行する,1件目のレコードの格納の場合

  • レコードの削除によって,当該データベースキー値を持つ子レコードが0件となる場合

注※24

次に示すどちらかの場合は,HiRDB/SDが内部的にシーケンシャルインデクスを更新するため,仮想ルートレコードにEXモードで排他を掛けます。

  • レコードの削除,またはレコードの一括削除によって,当該データベースキー値を持つ子レコードが0件となったあとに実行する,1件目のレコードの格納の場合

  • レコードの削除,またはレコードの一括削除によって,当該データベースキー値を持つ子レコードが1件以上から0件となる場合

注※25

レコードの一括削除の実行前に当該データベースキー値を持つ子レコードが0件の場合,各排他資源の排他制御モードは次のようになります。

シーケンシャルインデクス格納用RDエリア:SR

行:−

注※26

TAMのデータベースの無排他検索機能で動作する場合は,排他を掛けません。

注※27

対象となるレコード型にインデクスが定義されている場合に限り,削除対象のレコードに排他を掛けます。

注※28

削除対象のファミリを事前割り当てページに格納している場合,SDBデータベースを操作するAPI(ERASE)実行時に子レコードが格納されていない事前割り当てページに対しても,ページを解放するために排他を掛けます。

注※29

SDBデータベースを操作するAPI(STORE)実行時に確保する事前割り当てページに対しても,EXモードで排他を掛けます。

注※30

SD排他モードは,SDB用UAP環境定義のsubschemaオペランドの-eオプションで指定します。-eオプションの指定値の意味は次のとおりです。

  • shared:ほかのUAP からの参照および更新を許します。

  • protected:ほかのUAP からの更新を許しません。

  • exclusive:ほかのUAP からの参照および更新を許しません。

  • nonprotected:ほかのUAPからの参照および更新を許します(ページ(サブページ分割をする場合はサブページ)に対する排他制御を行いません)。

注※31

アクセス目的は,SDB用UAP環境定義のsubschemaオペランドの-aオプションで指定します。-aオプションの指定値の意味は次のとおりです。

  • retrieve:レコードの参照だけを行います。

  • update:レコードの参照および更新を行います。

注※32

次の2つの条件が重なる場合だけ,排他を掛けます。

  • レコードの検索(FETCH)または位置指示子の位置づけ(FIND)でルートレコードに位置づけている。

  • 排他自動解除機能を使用している。またはルートレコード格納ページに対して排他制御モードSRまたはPUで排他制御をしている(subschemaオペランドの-pオプションにsharerootを指定している)。

注※33

ルートレコード型に排他が掛かっている場合は,デッドロック防止のため,排他を掛けません。

注※34

ルートレコード格納ページの共用排他指定の意味は次のとおりです。

  • ルートレコード格納ページの共用排他指定あり:ルートレコード格納ページに,排他制御モードSRまたはPUで排他制御を行います。

  • ルートレコード格納ページの共用排他指定なし:ルートレコード格納ページに,排他制御モードEXで排他制御を行います。

ルートレコード格納ページの共用排他指定ありとなしは,SDB用UAP環境定義のsubschemaオペランドの-pオプションで指定します。

ルートレコード格納ページの共用排他指定と,-pオプションの対応関係は次のとおりです。

  • ルートレコード格納ページの共用排他指定あり:-p shareroot

  • ルートレコード格納ページの共用排他指定なし:-p occupyroot

注※35

システム共通定義pd_lock_uncommited_delete_dataオペランドにWAITを指定している場合だけ,排他を掛けます。同じデータベースキーを追加する後続のトランザクションを,即時ユニークエラーとしないで排他待ちにさせるためです。

注※36

NOWAIT検索とは,無排他検索のことです。無排他検索機能,または無排他検索機能との同時実行を許容していない機能を実行すると,排他が掛かります。

注※37

対象となるレコード型に二次インデクスが定義されている場合に,二次インデクスの一意性を保証するために,排他を掛けます。

注※38

検索に使用するインデクスを格納しているRDエリアだけに排他が掛かります。

注※39

シーケンシャルインデクスと二次インデクスの一意性を保証するために,排他を掛けます。

なお,次の表には,SDBデータベースを操作するAPIまたはDMLがリターンした時点で確保している排他だけを記載しています。

上記の表には,処理途中で一時的に確保する排他については記載していません。処理途中で一時的に確保する排他には次のものがあります。

注※

ただし,次の場合には一時的な排他も確保しません。

  • 4V FMBまたは4V AFMのSDBデータベースで,SDBデータベースを操作するAPIの排他モード1に'N'(無排他モード)を指定した場合

  • TAMのデータベースの無排他検索機能で動作する場合

(3) 同一レコード格納用RDエリアに対する,SDBデータベースへのアクセスの同時実行可否

■4V FMBまたは4V AFMのSDBデータベースの場合

表2-35 排他制御のモードの組み合わせの例(4V FMBのSDBデータベースの場合)」と「表2-36 排他制御のモードの組み合わせの例(4V AFMのSDBデータベースの場合)」に示すように,4V FMBまたは4V AFMのSDBデータベースを操作するAPIの実行時,レコード格納用RDエリアには,SRモードまたはSU モードでしか排他が掛かりません。そのため,そのレコード格納用RDエリアに対して排他を掛けるほかのトランザクションからのSDBデータベースを操作するAPIの実行は,レコード格納用RDエリアの排他によって,待ち状態になることはありません(ただし,そのほかのページなどの排他によっては待ち状態になることはあります)。

■SD FMBのSDBデータベースの場合

表2-37 排他制御のモードの組み合わせの例(SD FMBのSDBデータベースの場合)」に示すように,SD FMBのSDBデータベースに対するDMLの実行時,SD排他モードとアクセス目的の指定の組み合わせによっては,レコード格納用RDエリアにPRモード,PUモード,またはEXモードで排他が掛かります。そのため,そのレコード格納用RDエリアに対して排他を掛けるほかのトランザクションからのDMLの実行は,レコード格納用RDエリアに掛かっている排他によっては,トランザクション(レコード格納用RDエリアにPRモード,PUモード,またはEXモードで排他を掛けているトランザクション)が終了するまで待ち状態になることがあります。

同一レコード格納用RDエリアに対する,SDBデータベースへのアクセスの同時実行可否を次の表に示します。

表2‒38 同一レコード格納用RDエリアに対する,SDBデータベースへのアクセスの同時実行可否(SD FMBのSDBデータベースの場合)

SD排他モードとアクセス目的の指定の組み合わせ

SD排他モードとアクセス目的の指定の組み合わせ

nonprotectedとretrieve

sharedとretrieve

sharedとupdate

protectedとretrieve

protectedとupdate

exclusiveとretrieve

exclusiveとupdate

nonprotectedとretrieve

×

×

sharedとretrieve

×

×

sharedとupdate

×

×

×

×

protectedとretrieve

×

×

×

×

protectedとupdate

×

×

×

×

×

exclusiveとretrieve

×

×

×

×

×

×

×

exclusiveとupdate

×

×

×

×

×

×

×

(凡例)

○:同時実行できます。

×:同時実行できません。

(4) 同一ルートレコード下のレコード群に対する,SDBデータベースを操作するAPIまたはDMLの同時実行可否

同一ルートレコード下のレコード群に対する,SDBデータベースの操作の同時実行可否を,SDBデータベース種別ごとに説明します。

(a) 4V FMBのSDBデータベースの場合

表2-35 排他制御のモードの組み合わせの例(4V FMBのSDBデータベースの場合)」に示すように,4V FMBのSDBデータベースに対する次の操作では,ルートレコードの格納ページにPUモードまたはEXモードで排他が掛かります。

  • 4V FMBのSDBデータベースの更新系の操作(レコードの更新(MODIFY),レコードの格納(STORE),レコードの削除(ERASE))

  • SDBデータベースを操作するAPIの排他モード1に,'E'(排他モード)または'O'(占有モード)を指定したレコードの検索(レコードの検索(FETCH),複数レコードの検索(FETCHDB ALL))

そのため,ルートレコードに排他が掛かっている間は,そのルートレコードおよびそのルートレコード下のレコード群に対して,排他を掛けるほかのトランザクションからのアクセスは待ち状態になることがあります。

同一ルートレコード下のレコード群に対する,SDBデータベースを操作するAPIの同時実行可否を次の表に示します。なお,ルートレコードが異なるレコードについては,同時実行できます。

表2‒39 同一ルートレコード下のレコード群に対する,SDBデータベースを操作するAPIの同時実行可否(4V FMBのSDBデータベースの場合)

SDBデータベースを操作するAPIの種類

レコードの検索(FETCH)または複数レコードの検索(FETCHDB ALL)

レコードの更新(MODIFY)

レコードの格納(STORE)

レコードの削除(ERASE)

APIの排他モード1の指定

'S'

'E'

'O'

'N'※

レコードの検索(FETCH)

または複数レコードの検索(FETCHDB ALL)

APIの排他モード1の指定

'S'

×

×

×

×

'E'

×

×

×

×

×

'O'

×

×

×

×

×

×

'N'

レコードの更新(MODIFY)

×

×

×

×

×

×

レコードの格納(STORE)

×

×

×

×

×

×

レコードの削除(ERASE)

×

×

×

×

×

×

(凡例)

○:同時実行できます。

×:同時実行できません。

注※

レコードの検索(FETCH)の場合に限り,SDBデータベースを操作するAPIの排他モード1に'N'(無排他モード)を指定できます。

(b) 4V AFMのSDBデータベースの場合

表2-36 排他制御のモードの組み合わせの例(4V AFMのSDBデータベースの場合)」に示すように,4V AFMのSDBデータベースでは同一仮想ルートレコード下のレコードの同時アクセスを可能とするため,レコードの検索(FETCH)およびレコードの更新(MODIFY)では仮想ルートレコードの格納ページにSRモードで排他を掛けます。

注※

SDBデータベースを操作するAPIの排他制御モード1の指定によって,SRモード以外の排他となることがあります。詳細については,「表2-36 排他制御のモードの組み合わせの例(4V AFMのSDBデータベースの場合)」を参照してください。

同一仮想ルートレコード下のレコード群に対する,SDBデータベースを操作するAPIの同時実行可否を次の表に示します。なお,仮想ルートレコードが異なるレコードについては,同時実行できます。

表2‒40 同一仮想ルートレコード下のレコード群に対する,SDBデータベースを操作するAPIの同時実行可否(4V AFMのSDBデータベースの場合)

SDBデータベースを操作するAPIの種類

レコードの検索(FETCH)

レコードの更新(MODIFY)

レコードの格納(STORE)

レコードの削除(ERASE)

レコードの一括削除※4

構成情報取得※4,※7

APIの排他モード1の指定

APIの排他モード1の指定

'S'

'E'

'O'

'N'

'S'/'E'/'O'

'N'

レコードの検索(FETCH)

APIの排他モード1の指定

'S'

6

※6

※1

×

×

'E'

1

1

※1

※1,※2

×

×

'O'

6

1

1

※1

※1,※2

×

×

5

'N'

レコードの更新(MODIFY)

6

1

1

※1

※1,※2

×

×

5

レコードの格納(STORE)

1

1,

2

1,

2

※1,※2

×

×

×

3,

5

レコードの削除(ERASE)

×

×

×

×

×

×

×

レコードの一括削除※4

×

×

×

×

×

×

×

構成情報取得※4,※7

APIの排他モード1の指定

'S'/'E'/'O'

5

※5

※5

×

×

'N'

(凡例)

○:同時実行できます。

×:同時実行できません。

−:該当しません。

注※1

同一レコード(ページ)に対するアクセスは同時に実行できません。

注※2

レコードの格納時(STORE)には,対象となるレコードのNEXTレコードおよびPRIORレコードの格納ページにPUモードで排他を掛けます。そのため,レコードの格納と次の操作との間で排他待ちが発生します。

  • SDBデータベースを操作するAPIの排他モード1に'E'(排他モード)または'O'(占有モード)が指定されたレコードの検索(FETCH)

  • レコードの更新(MODIFY)

なお,レコードの一括削除後にレコードの格納をする場合,削除前の一連番号の最大値に達するまで,レコードの格納処理は,内部的にレコードの更新と同等の変更処理に置き換わります。この場合のレコードの格納は,上記に該当しません。

注※3

仮想ルートレコードの追加を伴う1件目のレコードの格納(STORE)とは同時に実行できません。

注※4

内部的に仮想ルートレコードにアクセスします。

注※5

次に示す条件をすべて満たす場合は,同時に実行できません。

  • SDBデータベース定義のOCCURRENCE NUMBER句の指定値が0である。

  • 次の操作のうちのどれかを,構成情報取得よりも先行して実行する。

    ・SDBデータベースを操作するAPIの排他モード1に'O'(占有モード)が指定されたレコードの検索(FETCH)

    ・レコードの更新(MODIFY)

    ・レコードの格納(STORE)

注※6

同一レコード(ページ)に対するアクセスは同時に実行できません。ただし,TAMのデータベースの無排他検索機能が動作する場合は,同一レコード(ページ)に対するアクセスが同時に実行できます。TAMのデータベースの無排他検索機能については,「2.9.6 TAMのデータベースの無排他検索機能【4V TAM】」を参照してください。

注※7

TAMのデータベースの無排他検索機能を適用する場合,SDBデータベースを操作するAPIの排他モード1に’N’(無排他モード)を指定したときと同様の同時実行性となります。

(c) SD FMBのSDBデータベースの場合

表2-37 排他制御のモードの組み合わせの例(SD FMBのSDBデータベースの場合)」に示すように,SD FMBのSDBデータベースに対して次の操作を実行した場合,ルートレコードの格納ページにPUモードまたはEXモードで排他が掛かります。

  • SD FMBのSDBデータベースの更新系の操作(レコードの更新(MODIFY),レコードの格納(STORE),レコードの削除(ERASE))

  • FOR UPDATEオペランドを指定するか,または2階層以上のSD FMBのSDBデータベースに対する,レコードの参照系の操作(レコードの検索(FETCH),位置指示子の位置づけ(FIND))

そのため,ルートレコードに排他が掛かっている間は,そのルートレコードおよびそのルートレコード下のレコード群に対して,排他を掛けるほかのトランザクションからのアクセスは,待ち状態になることがあります。

同一ルートレコード下のレコード群に対する,DMLの同時実行可否を次の表に示します。

なお,ルートレコードが異なるレコードについては,同時実行できます。

表2‒41 同一ルートレコード下のレコード群に対する,DMLの同時実行可否(SD FMBのSDBデータベースの場合)

[図データ]

(凡例)

○:同時実行できます。

×:同時実行できません。

注※1

SDB用UAP環境定義のsubschemaオペランドの-pオプションで指定します。

あり:ルートレコード格納ページに,排他制御モードSRまたはPUで排他制御を行います(shareroot指定)。

なし:ルートレコード格納ページに,排他制御モードEXで排他制御を行います(occupyroot指定)。

注※2

SD排他モード(SDB用UAP環境定義のsubschemaオペランドの-eオプションの指定)がprotectedの場合,レコード格納用RDエリアの排他が競合するため,同時実行できません。