2.4.3 排他の取得期間

トランザクションのコミット処理を行い,更新バッファ上のデータをDBエリアに反映するときに排他が取得されます。排他の取得期間を次の図に示します。

図2-9 排他の取得期間

[図データ]

説明
  • 更新バッファ上のデータをDBエリアに反映するときに排他が取得されます。
  • 行単位(インデクスはページ単位)で排他が取得されるため,排他の取得期間中はA行を参照したり,A行を更新バッファ上に読み込んだりすることはできません。
<この項の構成>
(1) 同じ行を同時に更新するトランザクションがある場合
(2) 同じ行を更新するトランザクションと参照するトランザクションがある場合

(1) 同じ行を同時に更新するトランザクションがある場合

同じ行を同時に更新するトランザクションがある場合の例を次の図に示します。

図2-10 同じ行を同時に更新するトランザクションがある場合の例

[図データ]

説明
  • スレッド2によるA行の更新処理中に,スレッド1がA行を更新しようとしたため,スレッド1はエラーとなり,トランザクションがロールバックします。
  • スレッド2によるA行の更新確定後(DBエリアへの反映確定後)に,スレッド3によるA行の更新処理が開始されたため,スレッド3はA行を更新できます。
  • 同一行に対するコミット処理は同時実行できません。そのため,スレッド2のコミット処理が完了したあとに,スレッド3のコミット処理が開始されます。

(2) 同じ行を更新するトランザクションと参照するトランザクションがある場合

同じ行を更新するトランザクションと参照するトランザクションがある場合の例を次の図に示します。

図2-11 同じ行を更新するトランザクションと参照するトランザクションがある場合の例

[図データ]

説明
スレッド1がA行の更新を行い,スレッド2がA行を参照しています。
この場合,スレッド1の更新確定前後(DBエリアへの反映確定前後)で,スレッド2が取り出す値が変わります。