REDOログバッファのチューニング

  • バッファサイズの設定
    • LOG_BUFFER初期化パラメータ(最小64KB、デフォルト512KB)
  • LGWR書込みタイミング
    • COMMIT
    • バッファの1/3に達したとき
    • タイムアウト(3秒)
    • DBWnの書込み時
  • REDOログバッファの診断

待機イベント
(v$session_wait)
log buffer space REDOログバッファ書込み速度がREDOログファイル書出し速度より速いため、ログバッファの領域確保を待機している
システム統計
(v$sysstat)
redo buffer allocation retries REDOログバッファの領域確保を待機した回数(空いてるバッファを確保しようとしたら競合した)
redo log space requests REDOログファイルへの書出しを待機した回数
redo entries REDOログエントリ数

  • チューニング目標
    • redo buffer allocation retries/redo entries=1%未満
  • チューニング方法
    • REDOログサイズを増やす
      • トランザクションが大量にある場合や、長い場合はREDOログ・バッファのサイズを大きくすることでREDOログ・ファイルへのI/Oが減少する
      • COMMITが頻繁に発生する場合、そのたびにバッファがクリアされるため、REDOログ・バッファのサイズは小さくてよい。ただし、その分、REDOログ・ファイルへのI/Oは増加する。
      • REDOログ・バッファのエントリは、DML文またはDDL文が発行されるときに作成され、問い合わせ(SELECT文の発行)の時には基本的には作成されないので、問い合わせの長さはREDOログ・バッファのサイズに影響しない。
      • ただし、ディスク・ソートの発生時などには、問い合わせからもREDOログ・バッファが作成されるので、問い合わせの発行がREDOログ・バッファのサイズとまったく無関係だというわけではない。
    • REDOログファイルを高速ディスクにする
  • REDOの低減方法
    • NOLOGGING
      • create table ... as select
      • create index
      • alter index ... rebuild
    • SQL*Loaderのダイレクトパスロードで以下の条件
      • データベースがNOARCHIVELOGモード
      • データベースがARCHIVELOGモード && ロードする表がNOLOGGING属性
      • データベースがARCHIVELOGモード && SQL*Loaderの制御ファイルにUNRECOVERABLE

    ※従来型パスロードは常にREDOログエントリを生成する