スケーラブルデータベースサーバ HiRDB Version 8 解説(UNIX(R)用)

[目次][用語][索引][前へ][次へ]

6.9.4 コミットとロールバック

トランザクションによるデータベースの更新内容が有効になることをコミットといいます。トランザクションによる更新内容が無効になることをロールバックといいます。コミットとロールバックのタイミングには,大きく分けて次に示す2種類があります。

コミット及びロールバックの設定タイミングをそれぞれの種類ごとに説明します。

<この項の構成>
(1) コミットのタイミング
(2) ロールバックのタイミング
(3) HiRDB/パラレルサーバのコミットメント制御

(1) コミットのタイミング

コミットのタイミングを次に示します。

SQLでタイミングを定義する場合
制御系SQLのCOMMIT文を指定して,COMMIT文が実行されるタイミングでコミットできます。

HiRDBで自動的にコミットされる場合
  • 定義系SQL又はPURGE TABLE文の実行時にHiRDBによって,自動的にコミットされます。
  • UAPの終了時にHiRDBによって,自動的にコミットされます。

(2) ロールバックのタイミング

ロールバックのタイミングを次に示します。

SQLでタイミングを定義する場合
制御系SQLのROLLBACK文を指定して,ROLLBACK文が実行されるタイミングで直前のコミット時点までロールバックできます。

HiRDBで自動的にロールバックされる場合
  • SQL実行時に処理が続行できなくなった場合,HiRDBによって,直前のコミット時点まで暗黙的にロールバックされます。
  • UAPの異常終了時にHiRDBによって,直前のコミット時点までロールバックされます。

(3) HiRDB/パラレルサーバのコミットメント制御

HiRDB/パラレルサーバのコミットメント制御は次に示す二つの方式があります。

(a) 一相コミット

コミットメント制御を二相(プリペア処理とコミット処理)にしないで,コミット処理だけを行います。したがって,フロントエンドサーバとバックエンドサーバ(ディクショナリサーバ)間の同期点処理の通信回数がブランチ数×2(二相コミットの場合はブランチ数×4)になるため,トランザクションの処理性能が向上します。コミットメント制御に一相コミットを使用する場合は,pd_trn_commit_optimizeオペランドONEPHASE(省略値)を指定してください。

なお,一相コミットが適用されるケースは,一つのトランザクション内の更新ブランチ数が一つのときだけです。それ以外の場合は二相コミットが適用されます。

一相コミットの処理方式を次の図に示します。

図6-24 一相コミットの処理方式

[図データ]

コミットメント制御で一相コミットを行うことを一相最適化といいます。

(b) 二相コミット

コミットメント制御をプリペア処理コミット処理の二相に分けてトランザクションの同期点処理を行います。フロントエンドサーバとバックエンドサーバ(ディクショナリサーバ)間の同期点処理の通信回数がブランチ数×4になります。二相コミットの処理方式を次の図に示します。

図6-25 二相コミットの処理方式

[図データ]

コミット発行元,及びトランザクションの実行環境によって,HiRDB/パラレルサーバのコミットメント制御が決定されます。HiRDB/パラレルサーバのコミットメント制御を次の表に示します。

表6-11 HiRDB/パラレルサーバのコミットメント制御

条件 HiRDBのコミットメント制御
コミット
発行元
コミット発行元が
指示したコミット
メント制御
トランザクションの実行環境
UAP 参照トランザクションの場合 一相コミット
トランザクションによる更新サーバ数が一つで,かつpd_trn_commit_optimizeオペランドにONEPHASEを指定(又は省略)している場合
上記以外 二相コミット
OLTPシステム 一相コミット 参照トランザクションの場合 一相コミット
トランザクションによる更新サーバ数が一つで,かつpd_trn_commit_optimizeオペランドにONEPHASEを指定(又は省略)している場合
上記以外 二相コミット
二相コミット 参照トランザクションの場合 一相コミット
上記以外 二相コミット

(凡例)−:該当しません。