log file sync をすごく簡単に言うと、、、
「コミット時に発生する待機で、LGWRによるREDOログの書込み完了待ち」
です。
トランザクションがコミットされると、データの整合性が保たれるようREDOログ情報をファイルに書き出す必要があります。
なので、サーバープロセスが commit すると LGWR は REDOログバッファの情報を REDOログファイルに書き出します。
サーバープロセスはそれを待ちます。
「commit 時に log file sync で待つ」
これは正常な動作です。
でも log file sync 待ちが長くなると何か問題があるかもしれません。
まずは、log file sync の平均待機時間を確認します。
log file sync の平均待機時間が延びてないなら、回数が増えてます。
裏取りでトランザクション数なんかをチェックします。
log file sync の平均待機時間が延びている場合、は大きくは2つのパターンに分類できます。
- I/O がおそい
REDOログファイルの書込みに時間がかかって log file sync 待ちが長くなる - LGWR が忙しい
LGWRがサーバープロセスに応答を返すのが遅れて log file sync 待ちが長くなる
I/O が遅いかどうかは、log file parallel write をみます。
log file parallel write は LGWR が I/O 待ちの時間です。合計時間でみても判断できないので、平均時間をみてあげます。
log file parallel write の平均待機時間が長い場合は、I/O の観点で調査します。
LGWR が忙しい場合は何もできないかもしれませんが、まあ見てみる価値はあるかと思います。
ASH をみると待機や CPU 処理の割合が見えます。変な待機がないか確認ができます。
また、ASH にはアイドルイベントはでてこないので、時間に対して行数が少ない場合は「LGWR、暇かも」といえます。ただ判断には正常時と比較が必要です。
ちなみに、log file sync がなんか遅かったので調べてみたら LGWR が「SYNC Remote Write」で待ってました。Data Guard の SYNC転送による待機でした。