トランザクションの再要求操作

トランザクションがTimesTenによってコミット済としてマークされた後、コミットの再要求フェーズがあります。

再要求操作について

トランザクションのコミットの再要求段階の間に、TimesTenのリソース・クリーンアップが発生します。DELETE操作を含むトランザクションについて考えてみましょう。

次に例を示します。SQL操作は削除した行を削除済としてマークしますが、これらの行が占有する領域は、実際にはトランザクションのコミットの再要求フェーズまでは解放されません。

再要求の間、TimesTenはトランザクションの開始時点からのすべてのトランザクション・ログ記録を再調査し、実行する必要がある再要求操作を決定してから、これらの操作を実行します。

パフォーマンス向上のため、数件のトランザクション・ログ・レコードをキャッシュしてトランザクション・ログ・ファイルへのアクセスを減らすことができます。このキャッシュはコミット・バッファと呼ばれ、その大きさは構成できます。これについては、次の「再要求操作についてのコミット・バッファの構成」の項を参照してください。

ノート:

  • 再要求フェーズは、コミット処理の一部として発生します。そのため、再要求フェーズが開始されると、トランザクションはコミットされたとみなされ、ロールバックできなくなります。

  • 再要求フェーズ中にアプリケーションが終了すると、クリーン・アップ操作により再要求が完了します。

再要求操作についてのコミット・バッファの構成

大きなトランザクション・コミットの再利用要求段階では大量の処理が必要になり、リソースを大量に消費します。このため、一般的には、より小さいトランザクションにすることをお薦めします。

ただし、コミット・バッファの最大サイズを増やすことでパフォーマンスを向上させることができます。コミット・バッファとは、再利用要求操作で使用されるトランザクション・ログ記録のキャッシュです。

ノート:

非常に大規模なトランザクション・コミット(100万行など)を実行することは、リソースを大量に消費するため、お薦めしません。非常に大規模なトランザクションをコミットした場合は、取り消さないでください。これは、トランザクションが完了するまでの時間がさらに長くなる可能性があるためです。これは、トランザクションが完了していない場合に取り消すと、TimesTenでロールバック処理を実行することが必要になることが原因です。

TimesTenのCommitBufferSizeMax接続属性を使用して、コミット・バッファの最大サイズをMB単位で指定できます。この設定のスコープは、現在のセッションです。効率性の向上のため、初期のメモリー割当ては最大値より大幅に小さくなっていますが、関連するログ・レコードがコミット・バッファに収まるように必要に応じて自動的に増えていき、割当ての最大値まで達します。その後、再要求フェーズのたびに、割当てが元の割当てに戻ります。デフォルトでは、最大値128KB、初期割当て16KBです。Oracle TimesTen In-Memory DatabaseリファレンスCommitBufferSizeMaxを参照してください

コミット・バッファの最大サイズを大きくすると、一時領域が対応して増加する場合があります。指定可能な最大サイズには、整数の最大値以外に特定の制限はありませんが、利用可能な一時領域を超えるとエラーが発生します。

次の関連機能に留意してください。

  • 一連のセッションの中でALTER SESSIONを使用して次のようにコミット・バッファの最大サイズを変更できます。ここでnはMB単位の最大値です。Oracle TimesTen In-Memory Database SQLリファレンスALTER SESSIONを参照してください。

    ALTER SESSION SET COMMIT_BUFFER_SIZE_MAX = n
  • ttCommitBufferStats組込みプロシージャを使用して接続に関する統計を収集し、コミット・バッファの最大サイズのチューニングに役立てることができます。この組込みパラメータはパラメータを取らず、コミット・バッファ・オーバーフローの合計数と、トランザクション・ログ・レコードの再要求操作に使用された最大メモリー量を、バイト単位で返します。バッファ・オーバーフローがある場合、コミット・バッファの最大サイズを増やすことを検討してください。オーバーフローがなく、最大メモリー使用量がコミット・バッファの最大サイズより大幅に少ない場合は、最大サイズを減らすことを検討してください。

    TimesTen Classicでは、ttCommitBufferStatsReset組込みプロシージャを使用して、これらの統計を0 (ゼロ)にリセットできます。これは、コミット・バッファの最大サイズに新しい値を設定し、統計を最初からやり直したい場合などに便利です。

    Oracle TimesTen In-Memory DatabaseリファレンスttCommitBufferStatsおよびttCommitBufferStatsResetを参照してください。

  • システム全体のコミット・バッファ・オーバーフローの数も、SYS.SYSTEMSTATS表内のTimesTen統計、txn.commits.buf.overflowedに記録されます。Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンスSYS.SYSTEMSTATSを参照してください。

  • CommitBufferSizeMaxの現在の設定を確認するには、ttConfiguration組込みプロシージャを呼び出します。