Virtual DataPort のトランザクション¶
Virtual DataPort では、以下の句を使用してトランザクションを定義できます。
BEGIN
。トランザクションを開始します。COMMIT
。アクティブトランザクションを確認します。ROLLBACK
。アクティブトランザクションに行った変更を取り消します。
Virtual DataPort のトランザクションは、最初から分散されています。そのため、2 フェーズコミットプロトコルを実装しているデータソースのみ、トランザクションに参加できます。ほとんどのデータベースベンダーは、このプロトコルを実装しています。さらに、カスタムラッパーとストアドプロシージャも、必要な操作が実装されている場合にトランザクションに参加できます。
Virtual DataPort は、以下のように、トランザクションの継続時間に一定の制限を設けています。
トランザクションを 30 分を超えて継続させることはできません。これを超える場合、トランザクションはロールバックされます。この制限は、管理者アカウントで次のコマンドを実行することで変更できます。
# The command below sets the transaction timeout to an hour (3600 seconds).
SET 'com.denodo.vdb.engine.session.transactionTimeout' = '3600';
トランザクションを開始したクライアントを 29 秒を超えてアイドル状態にすることはできません。つまり、ステートメントの実行が終わったら、クライアントは別のステートメントを 30 秒未満で実行する必要があります。30 秒以上かかると、トランザクションはロールバックされます。
この制限を変更するには、管理者アカウントで次のコマンドを実行してください。
# The command below sets the inactivity timeout to a minute (60 seconds).
SET 'com.denodo.vdb.engine.session.inactiveTransactionTimeout' = '60';
データソースを分散トランザクションに参加させたくない場合は、ソース構成プロパティ supportsDistributedTransactions
を no
に設定します。
注釈
トランザクションは実際に必要なときにだけ使用するようにしてください。つまり、実際にトランザクション内でクエリを実行する必要がないかぎり、クエリを BEGIN
と COMMIT
で囲まないようにしてください。Virtual DataPort は、2 フェーズコミットプロトコルを使用する分散トランザクションマネージャーを使用するからです。このプロトコルを使用すると、クエリの実行時にある程度のオーバーヘッドが生じます。そのため、必要がない場合に BEGIN
と COMMIT
を追加すると、クエリの実行に必要以上の時間がかかるようになります。
デフォルトでは、Denodo の ODBC インターフェイスは、トランザクションの開始リクエストを無視します。詳細については、開発者ガイドの「 トランザクションの無効化 」のセクションを参照してください。
デフォルトでは、Denodo の JDBC ドライバーは、トランザクション管理を担う JDBC API のメソッドの呼び出しを無視します。この動作は、
autoCommit
プロパティで制御できます。このプロパティの詳細については、「 JDBC ドライバーのパラメータとそのデフォルト値 」を参照してください。
サーバーのモニタリングインターフェイス (JMX インターフェイス) に接続して、アクティブトランザクションの数を取得することができます。詳細については、管理ガイドの「 VDBServerManagementInfo MBean の属性 」のセクションを参照してください。