Oracleでアーカイブログが大量に

運用中のOracleデータベースで、夜間にアーカイブログが大量に吐かれて停止寸前になった。
普段の10倍くらいのサイズになっていた。


ちなみにOracleのバージョンは11.2.0.1 (SE)。


最初はバッチ処理の不具合で、大量にレコードを更新したのだろうと思っていたが、アーカイブログのサイズの監視スクリプトを見直しても、アーカイブログが急増する時間帯にバッチ処理などはほとんど走っていない。


ただ、当該の時間帯に、Oracleにデフォルトで有効になっている自動データベース・メンテナンス・タスクが走っていた。


Oracleの自動データベース・メンテナンス・タスクには以下の3種類がある。

  • オプティマイザ統計収集(auto optimizer stats collection)
  • セグメント・アドバイザ(auto space advisor)
  • SQLチューニング・アドバイザ(sql tuning advisor)


最後の「SQLチューニング・アドバイザ」は無効になっていたため、怪しいのは「オプティマイザ統計収集」と「セグメント・アドバイザ」である。
アーカイブログが大量に吐かれる日と吐かれない日があるため、特定のテーブルの統計情報が失効したのがトリガーでは?と考え、まずは「オプティマイザ統計収集」をオフにしてみた。

BEGIN
dbms_auto_task_admin.disable(
client_name => 'auto optimizer stats collection',
operation => NULL,
window_name => NULL);
END;
/

しかし、これでは改善しないため、もう一方の「セグメント・アドバイザ」のほうを無効化してみたところ、アーカイブログが大量に吐かれる現象は収まった。

BEGIN
dbms_auto_task_admin.disable(
client_name => 'auto space advisor',
operation => NULL,
window_name => NULL);
END;
/

後で調べたところ、どうも特定のOracleのバージョンに存在するバグのようだ。

http://www.dbi-services.com/index.php/blog/entry/compression-advisor-excessive-redo-log-file-generation