トランザクションの再要求操作
トランザクションが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
組込みプロシージャを呼び出します。