目次
1.前提
2.事象
3.とりあえずエラーメッセージで検索した結果
4.ログファイルサイズを大きくしたが
5.困ってサポートに問い合わせた結果
6.感想
1. 前提
- データベースエンジンはOracle 19c
- 作成直後のRDSで、後述するエラー発生条件である膨大な更新処理などは実施していない
2. 事象
RDSのアラートログにおいて、5分おきに下記のエラーメッセージが出力されていました。
Thread 1 cannot allocate new log, sequence XXXX Checkpoint not complete
3. とりあえずエラーメッセージで検索した結果
クラスメソッド様のこちらの記事がヒットし、下記の内容が記載されていました。
上記エラーメッセージはログスイッチ発生時にチェックポイントが未完了であり、ログスイッチが待ち状態になっている時に出力される。
ログスイッチの頻発が上記エラーメッセージの一因になっているため、出力REDOログファイルのサイズ・数を増加してログスイッチの発生間隔を長くする必要がある。
4. ログファイルサイズを大きくしたが
記事の内容に沿って、デフォルトのREDOログファイル構成「128MB×4」を「500MB×3」に変更しました。
しかしアラートログのエラーメッセージ内容は変わらず、出力頻度も変わらず5分おきでした(つまりログスイッチ発生頻度も変わっていません)。
サイズが不足していたのかもしれないと考え「1000MB×3」に設定しましたが状況は変わりませんでした。
5. 困ってサポートに問い合わせた結果
AWSサポートに問い合わせた結果、下記のような回答が返ってきました。
エラーメッセージが出力されることはRDS for Oracleで想定される動作であり、問題ない。チェックポイント完了時にログスイッチは正常に実行される。
ポイントインリカバリのためにログスイッチは5分間隔で発生するよう設定されており、5分以上に設定することはできない。(設定内容は初期化パラメーター ARCHIVE_LAG_TARGETで確認可能。)
もしログスイッチが5分より短い頻度で実行されている場合は更新量に対してREDOログファイルサイズが小さい可能性があるためサイズ増強を勧める。
ログスイッチ関連が原因となってRDSのパフォーマンスに悪影響が発生している場合、Performance Insightsにおいて下記のような待機イベントという形で現れる。
・log file sync
・log file switch (checkpoint incomplete)
・log file switch completion
上記待機イベントは発生していなかったので、特に何もする必要はないことが分かりました。
最初に確認しとけよって話ですが、パフォーマンスに問題ない本番稼働RDSのアラートログにも上記エラーメッセージが5分おきに出力されていたので、本当に仕様らしいです。
6. 感想
「オンプレのOracleだとログスイッチ頻度は20分に1回ペースが理想らしいから、5分に1回ペースは異常じゃん‥合わせなければ!」と思って奔走していましたが、結局RDSの仕様だったというオチでした。オンプレにおける定石は決してクラウドにおける定石ではないことを思い知りました。
また、Performance Insightsはとりあえず設定しているものの全然使っていなかったのでこまめにチェックしようと心に決めました。
特にエビデンスも何もない記事になってしまいましたが、同じエラーメッセージが出てびっくりした人の一助となれば幸いです。