Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Client for .NET Framework 使用の手引


transaction

〈このページの構成〉

形式

<transaction internalWatchTime
             ="トランザクション同期点処理時の最大通信待ち時間"
             rollbackInfo="no|self|remote|all"
             limitTime="トランザクションブランチ最大実行可能時間"
             recoveryType="type1|type2|type3"
             expireTime="トランザクションブランチ限界経過時間"
             cpuTime="トランザクションブランチCPU監視時間"
             expireSuspend="all|async|none"
             statistics="統計情報項目"
             optimize="トランザクション最適化項目"
             rollbackResponse="true|false"
             completionLimitTime="トランザクション完了限界時間"/>

説明

CUP.NETからトランザクションを開始する場合に指定します。

この要素は省略できます。

属性

internalWatchTime="トランザクション同期点処理時の最大通信待ち時間"  〜〈符号なし整数〉((1〜65535))(単位:秒)

トランザクションの同期点処理で,トランザクションブランチ間で行う通信(プリペア,コミット,ロールバック指示,応答など)の受信待ち時間の最大値を指定します。

この属性は省略できます。省略した場合,クライアントが属しているOpenTP1のrapリスナーサービス定義のtrn_watch_timeオペランドの指定に従います。

rollbackInfo="no|self|remote|all"

トランザクションブランチがロールバックした場合に,ロールバック要因に関する情報をログに取得するかどうかを指定します。

この属性は省略できます。省略した場合,クライアントが属しているOpenTP1のrapリスナーサービス定義のtrn_rollback_information_putオペランドの指定に従います。

no:ロールバック情報を取得しません。

self:ロールバック要因が発生したトランザクションブランチでだけ,ログにロールバック情報を取得します。

remote:selfに加え,他ノードのトランザクションブランチからロールバック要求されたトランザクションブランチでも,ログにロールバック情報を取得します。

all:remoteに加え,自ノードのトランザクションブランチからロールバック要求されたトランザクションブランチでも,ログにロールバック情報を取得します。

limitTime="トランザクションブランチ最大実行可能時間"  〜〈符号なし整数〉((0〜65535))(単位:秒)

トランザクションブランチの最大実行可能時間を指定します。

この属性は省略できます。省略した場合,クライアントが属しているOpenTP1のrapリスナーサービス定義のtrn_limit_timeオペランドの指定に従います。

recoveryType="type1|type2|type3"

RPCがタイムアウトし,RPC発行先プロセスのアドレスが未解決の場合やトランザクション実行中のUAPがダウンした場合に,トランザクションブランチ間の連絡がスムーズにできないで,トランザクションの決着に時間が掛かることがあります。

この属性では,次に示す障害が発生した場合のトランザクション同期点処理方式を,指定値に示す三つの方式から選択して指定します。

(障害1)RPCがタイムアウトした場合

この場合,RPC発行元トランザクションブランチは,サービス要求がどのプロセスで実行されているかがわからないため,RPC発行先トランザクションブランチにトランザクション同期点メッセージを送信できないで,RPC発行元トランザクションブランチおよびRPC発行先トランザクションブランチがトランザクション同期点メッセージ待ちとなり,トランザクションの決着に時間が掛かります。

(障害2)RPC発行元UAPがRPCの応答受信前にダウンした場合

この場合,RPC発行元トランザクションブランチは,サービス要求がどのプロセスで実行されているかがわからないため,RPC発行先トランザクションブランチにトランザクション同期点メッセージを送信できないで,RPC発行先トランザクションブランチはトランザクション同期点メッセージ待ちとなり,トランザクションの決着に時間が掛かります。

(障害3)RPC発行先UAPからの応答受信後にRPC発行元UAPとRPC発行先UAPがほぼ同時にダウンした場合

この場合,それぞれのトランザクションブランチを引き継いだトランザクション回復プロセスは,相手UAPプロセスのダウンを知らないため,すでに存在しないUAPプロセスにトランザクション同期点メッセージを送信してしまい,トランザクションの決着に時間が掛かることがあります。

type1

(障害1)が発生した場合,RPC発行元トランザクションブランチおよびRPC発行先トランザクションブランチは,トランザクション同期点メッセージ受信処理がタイムアウトすることによって,トランザクションを決着します。

(障害2)が発生した場合,RPC発行元トランザクションブランチは,RPC発行先トランザクションブランチにトランザクション同期点メッセージを送信しないでトランザクションを決着します。RPC発行先トランザクションブランチは,トランザクション同期点メッセージ受信処理がタイムアウトすることによって,トランザクションを決着します。

(障害3)が発生した場合,RPC発行元トランザクションブランチおよびRPC発行先トランザクションブランチは,トランザクション同期点メッセージ受信処理がタイムアウトすることによって,トランザクションを決着します。

type2

(障害1)が発生してトランザクションをコミットする場合はtype1と同じです。

(障害1)が発生してトランザクションをロールバックする場合,または(障害2)が発生した場合は,RPC発行元トランザクションブランチは,RPC発行先トランザクションブランチが存在するノードのトランザクションサービスプロセスにトランザクション同期点メッセージを送信後,トランザクションを決着します。トランザクション同期点メッセージを受信したトランザクションサービスプロセスは,該当するトランザクションブランチを処理中のプロセスに,トランザクション同期点指示を送信します。

(障害3)が発生した場合,RPC発行元トランザクションブランチおよびRPC発行先トランザクションブランチは,トランザクション同期点メッセージ受信処理がタイムアウトすることによって,トランザクションを決着します。

type3

(障害1)が発生してトランザクションをコミットする場合は,type1と同じです。

(障害1)が発生してトランザクションをロールバックする場合,(障害2)が発生した場合,または(障害3)が発生した場合,相手トランザクションブランチが存在するノードのトランザクションサービスプロセスに,トランザクション同期点メッセージを送信後,トランザクションを決着します。トランザクション同期点メッセージを受信したトランザクションサービスプロセスは,該当するトランザクションブランチを処理中のプロセスに,トランザクション同期点指示を送信します。

次に示す場合,このオペランドにtype2またはtype3を指定しても,トランザクションの決着に時間が掛かることがあります。

  1. RPC実行中に,RPC発行先UAPの状態が変更となり(負荷増加,UAP終了,UAP閉塞など),ほかのノードの同一UAPにサービス要求が再転送された場合

  2. 相手先のOpenTP1がこのオプションをサポートしていないバージョンの場合

  3. 相手先トランザクションブランチがトランザクション同期点メッセージ受信処理以外で時間が掛かっている場合

なお,このオペランドは,ユーザサービス定義またはrapリスナーサービス定義,およびユーザサービスデフォルト定義でも指定できます。

この属性は省略できます。省略した場合,クライアントが属しているOpenTP1のrapリスナーサービス定義のtrn_partial_recovery_typeオペランドの指定に従います。

expireTime="トランザクションブランチ限界経過時間"  〜〈符号なし整数〉((0〜65535))(単位:秒)

トランザクションブランチの処理時間の最大値を指定します。指定時間を超えてもトランザクションブランチが完了しない場合は,そのトランザクションブランチのプロセスを異常終了させてロールバックします。

0を指定した場合,時間監視をしません。

この属性は省略できます。省略した場合,クライアントが属しているOpenTP1のrapリスナーサービス定義のtrn_expiration_timeオペランドの指定に従います。

cpuTime="トランザクションブランチCPU監視時間"  〜〈符号なし整数〉((0〜65535))(単位:秒)

トランザクションブランチが同期点処理までに使用できるCPU時間を指定します。

0を指定した場合,CPU時間を監視しません。

指定時間を超えた場合は,そのトランザクションブランチのプロセスを異常終了させてロールバックします。

この属性は省略できます。省略した場合,クライアントが属しているOpenTP1のrapリスナーサービス定義のtrn_cpu_timeオペランドの指定に従います。

expireSuspend="all|async|none"

トランザクションブランチの処理を監視するとき,次の処理時間も監視時間に含むかどうかを指定します。

  1. 監視対象のトランザクションブランチが,RPC機能を使用してほかのトランザクションブランチを呼び出し,その処理が終わるのを待つ時間

  2. 連鎖RPCで呼び出されたサーバUAPが次のサービス要求を待つ時間

  3. 監視対象のトランザクションブランチが,非同期型RPCを使用してほかのトランザクションブランチを呼び出したあと,処理結果受信処理をしている時間

この属性は省略できます。省略した場合,クライアントが属しているOpenTP1のrapリスナーサービス定義のtrn_expiration_time_suspendオペランドの指定に従います。

all:1,2,3すべてを監視時間に含みます。

async:3だけを監視時間に含みます。

none:1,2,3のどれも監視時間に含みません。

statistics="統計情報項目"

トランザクションブランチの統計情報を取得する項目を,次の文字列で指定します。

この属性は省略できます。省略した場合,クライアントが属しているOpenTP1のrapリスナーサービス定義のtrn_statistics_itemオペランドの指定に従います。

また,統計情報項目は複数指定できます。複数指定するときは,コンマ(,)で区切って指定します。

nothing:統計情報を取得しません。

base:基本情報として,次の情報を取得します。
  • トランザクションブランチの識別子

  • トランザクションブランチの決着結果

  • トランザクションブランチの実行プロセス種別

  • トランザクションブランチの実行サーバ名

  • トランザクションブランチの実行サービス名

executiontime

基本情報とトランザクションブランチの実行時間情報を取得します。

cputime

基本情報とトランザクションブランチのCPU時間情報を取得します。

optimize="トランザクション最適化項目"

複数のユーザサーバで構成されるグローバルトランザクションの性能を向上させるための最適化項目を,次の文字列で指定します。CUP.NETからトランザクションを開始する場合にだけ有効です。

この属性は省略できます。省略した場合,クライアントが属しているOpenTP1のrapリスナーサービス定義のtrn_optimum_itemオペランドの指定に従います。

また,最適化項目は複数指定できます。複数指定するときは,コンマ(,)で区切って指定します。

base

同期点取得処理全体(プリペア処理,コミット処理,およびロールバック処理)を最適化します。OpenTP1のトランザクション制御は2相コミット方式で実行しているため,二つのトランザクションブランチ間のコミット制御には,4回のプロセス間通信が必要となります。

次の条件をすべて満たす場合,親トランザクションブランチが子トランザクションブランチのコミット処理を代わりに実行することで,コミット制御で必要な4回のプロセス間通信を削減します。

  • 親トランザクションブランチと子トランザクションブランチが同一OpenTP1下にあること。

  • 親トランザクションブランチが子トランザクションブランチを同期応答型RPCで呼び出していること。

  • 子トランザクションブランチでアクセスしたリソースマネジャのXAインタフェース用オブジェクトが,親トランザクションブランチにもリンケージされていること。

asyncprepare

baseの指定条件を満たしていないため同期点取得処理全体の最適化ができない場合に,プリペア処理を最適化します。

次の条件をすべて満たす場合,親トランザクションブランチから発行されたRPCによって子トランザクションブランチがサービス要求を実行したときに,RPCが返される前にプリペア処理を実行することで,2回のプロセス間通信を削減します。

  • baseを指定した最適化ができないこと。

  • 親トランザクションブランチが,子トランザクションブランチを同期応答型RPCで呼び出していること。

rollbackResponse="true|false"

RPC発行先トランザクションブランチにロールバック指示を送信したあと,ロールバック完了通知を受信するかどうかを指定します。CUP.NETからトランザクションを開始する場合にだけ有効です。

この属性は省略できます。省略した場合,クライアントが属しているOpenTP1のrapリスナーサービス定義のtrn_rollback_response_receiveオペランドの指定に従います。

true:ロールバック完了通知を受信します。

false:ロールバック完了通知を受信しません。

falseを指定した場合,RPC発行先トランザクションブランチからのロールバック完了通知を受信しないで(RPC発行先トランザクションブランチのロールバック処理の完了を待たないで)自トランザクションブランチを終了します。

completionLimitTime="トランザクション完了限界時間"  〜〈符号なし整数〉((0〜65535))(単位:秒)

rapサーバで代理実行するトランザクションブランチの開始から終了までの最大実行時間を指定します。指定時間を超えた場合,rapサーバのプロセスが異常終了したあとに,トランザクションブランチが回復プロセスによってコミット,またはロールバックのどちらかに決着して終了します。

0を指定した場合は,トランザクションブランチの最大実行時間を監視しません。

この指定を省略した場合は,rapリスナーサービス定義のtrn_completion_limit_timeオペランドの指定に従います。

この属性は省略できます。

記述例

<transaction internalWatchTime="180"
             rollbackInfo="all"
             limitTime="0"
             recoveryType="type1"
             expireTime="0"
             cpuTime="0"
             expireSuspend="all"
             statistics="base"
             optimize="base"
             rollbackResponse="false"
             completionLimitTime="0"/>