COMMIT WRITE

目次

基本情報

 

パラメータ情報

 

Syntax   : COMMIT_WRITE = {IMMEDIATE | BATCH},{WAIT |NOWAIT}
Default  : IMMEDIATE, WAIT
設定方法  : Parameter File
           ALTER SYSTEM SET COMMIT_WRITE = BATCH, NOWAIT
           ALTER SESSION SET COMMIT_WRITE = BATCH, NOWAIT
           COMMIT WRITE BATCH NOWAIT

 

サポート : 10gR2

 

説明

 

TransactionのCommitの実行時にRedo Writeを実行する方法を決定します。ユーザーがCommitを実行すると、OracleはRedo Bufferの変更履歴をRedo Logに即座に(IMMEDIATE)記録し、実際のRedo Logに記録されるまで待ちます(WAIT)。この実行方法は、ユーザーによるデータの変更履歴がRedo Logに記録されて事後Recoveryに使用することがあることを100%保証するためです。 COMMIT_WRITEパラメータを使用すると、これらのRedo Log記録方式を変更することができます。可能な組み合わせは、以下の通りです。

 

・IMMEDIATE + WAIT:基本方式でRedo Writeをすぐに要求して記録が終わるまで待ちます。
・IMMEDIATE + NOWAIT:要求はすぐに送信され、記録が終わるのを待たずに、ユーザーに制御を渡します。
・BATCH + WAIT:複数のRedo Write要求を集めて一度に要求し、記録が終わるまで待ます。
・BATCH + NOWAIT:複数のRedo Write要求を集めて一度に要求し、記録が終わるのを待たずに、ユーザーに制御を渡します。

 

注意

 

COMMIT_WRITEとOLTP/ DSS

OLTP環境では、COMMIT_WRITEパラメータを変更してはいけません。BATCHやNOWAITモードのCommitでRedo Logにデータが正確に保存される保証がないため、異常終了時のデータの整合性を保証することはできないのです。 DSS環境では、データの細かい整合性が不要な場合が多いため、パフォーマンスを向上させるために、このパラメータを積極的に活用することができます。

PL/SQLのAsynchronous Commit

PL/SQLブロック内のCommit要求はまるでBATCH、NOWAITモードのCOMMIT_WRITEパラメータを使用するのと同じ効果があります。これAsynchronous Commitと呼びます。したがってバッチジョブを処理する場合には、PL/SQLを使用することが性能面で有利です。

関連情報

 

1. log file sync待機イベント