2.10.1 排他制御モード
排他制御モードの種類や同時実行の関係などについて説明します。
(1) 排他制御モードの種類
HADBサーバの排他制御モードには,複数の種類があります。
-
占有モード(EXCLUSIVE)(EX)
占有モードは,排他資源を確保したトランザクションが,排他資源を占有するモードです。占有モードで排他資源が確保されている場合,ほかのトランザクションは,排他資源に対して参照処理と更新処理を実行できません。
-
保護更新モード(PROTECTED UPDATE)(PU)
保護更新モードは,排他資源を確保したトランザクションが更新処理を行うモードです。保護更新モードで排他資源が確保されている場合,ほかのトランザクションは,排他資源に対して参照処理だけを実行できます。
-
共有更新モード(SHARED UPDATE)(SU)
共有更新モードは,排他資源を確保したトランザクションが更新処理を行うモードです。共有更新モードで排他資源が確保されている場合,ほかのトランザクションは,排他資源に対して参照処理と更新処理を実行できます。
-
共有参照モード(SHARED RETRIEVE)(SR)
共有参照モードは,排他資源を確保したトランザクションが参照処理を行うモードです。共有参照モードで排他資源が確保されている場合,ほかのトランザクションは,排他資源に対して参照処理と更新処理を実行できます。
(2) 排他制御モードの同時実行の関係性(排他資源の確保の競合が発生したときの動作)
複数のトランザクションが同一の排他資源を確保しようとした場合,排他資源の確保の競合が発生します。競合が発生した場合,先発のトランザクションの排他制御モードと,後発のトランザクションの排他制御モードの組み合わせによって,トランザクションの同時実行可否が決まります。
同一の排他資源に対する,トランザクションと排他制御モードの同時実行の関係性について,次の表に示します。
先発のトランザクションの排他制御モード |
後発のトランザクションの排他制御モード |
|||
---|---|---|---|---|
SR |
SU |
PU |
EX |
|
共有参照モード(SR) |
○ |
○ |
○ |
× |
共有更新モード(SU) |
○ |
○ |
× |
× |
保護更新モード(PU) |
○ |
× |
× |
× |
占有モード(EX) |
× |
× |
× |
× |
- (凡例)
-
○:先発のトランザクションと後発のトランザクションを同時に実行できます。
×:後発のトランザクションは実行できません。
上記の表で×の組み合わせの場合,後発のトランザクションは排他資源を確保できません。そのため,後発のトランザクションの動作は,次のどちらかになります。
-
後発のトランザクションがエラーになり,ロールバックする
-
後発のトランザクションが,排他資源を確保できるまで待つ※
詳細については,「2.10.5 確保される排他資源と排他制御モード」を参照してください。
- 注※
-
排他資源を確保できるまで待つ場合に,同一トランザクション内で確保中の排他資源に対して,次に示す事象が発生したときはエラーになります。
-
確保中の排他資源に対する排他制御モードの遷移が発生したが,ほかのトランザクションと排他の競合が発生したため,排他制御モードの遷移ができないとき
なお,adbarchivechunkコマンドによるチャンクのアーカイブ処理の延長で,次に示す場合はエラーになりません。排他制御モードの遷移が完了するまで処理を待ちます。
-
前処理表に対する排他を取得している際に,共有参照モード(SR)から占有モード(EX)に排他制御モードを遷移する場合
-
処理対象表に対する排他を取得している際に,保護更新モード(PU)から占有モード(EX)に排他制御モードを遷移する場合
-
(3) 排他制御モードの遷移
1つのトランザクション内で同じ排他資源に対して,異なる種類の排他制御モードで続けて排他を取得した場合,次に示す表のとおりに排他制御モードが遷移します。
最初に確保した排他制御モード |
次に確保した排他制御モード |
|||
---|---|---|---|---|
SR |
SU |
PU |
EX |
|
共有参照モード(SR) |
− |
SUに遷移する |
PUに遷移する |
EXに遷移する※1,※2 |
共有更新モード(SU) |
− |
− |
PUに遷移する |
EXに遷移する※2 |
保護更新モード(PU) |
− |
− |
− |
EXに遷移する※2 |
占有モード(EX) |
SRに遷移する※3 |
− |
PUに遷移する※4 |
− |
- (凡例)
-
−:遷移しません。
- 注※1
-
ALTER VIEW文の処理の延長で,次に示す排他資源を確保する場合に,占有モード(EX)に遷移します。それ以外の場合は,排他資源を確保するときにエラーになります。
-
前処理表
-
- 注※2
-
adbarchivechunkコマンドの処理の延長で,次に示す排他資源を確保する場合に,占有モード(EX)に遷移します。それ以外の場合は,排他資源を確保するときにエラーになります。
-
前処理表
-
DBエリア(処理対象表およびインデクスの格納処理)
-
処理対象表
-
- 注※3
-
adbarchivechunkコマンドの処理の延長で,次に示す排他資源を確保する場合に,共有参照モード(SR)に遷移します。それ以外の場合は,排他制御モードは遷移しません。
-
前処理表
-
DBエリア(処理対象表およびインデクスの格納処理)
-
- 注※4
-
adbarchivechunkコマンドの処理の延長で,次に示す排他資源を確保する場合に,保護更新モード(PU)に遷移します。それ以外の場合は,排他制御モードは遷移しません。
-
処理対象表
-