この記事ではAWRのTop 10 Foreground Eventsの見方について解説します。
Top 10 Foreground Eventsとは
Top 10 Foreground EventsとはAWRレポートで出力される、データベースの待機時間の多いイベントを示すものです。
待機時間の多い順に10個のイベントが表示されます。
処理に時間がかかっているイベントを改善することでデータベース全体の処理速度の改善につながります。
データベース全体の処理傾向を確認できるのでAWRの中でも特に重要な項目になります。
レポートの見方
レポートは下記のように出力されます。
Eventに待機イベントの種類、Waitsにはイベントの発生回数、Wait Classは待機の種類を表します。
イベントの種類
主な待機イベントの種類は以下の通りです。
・DB CPU
データベースの処理でCPUを使用した時間です。
CPUコア数×AWRの取得時間=DB CPUの理論上の最大値となります。
通常は待機時間の最上位に来ることが多いです。
反対にDB CPUよりも上位に来ているイベントがあればそのイベントが遅延の原因になっているケースが多いです。
極端に多い場合はSQL ordered by CPU timeでCPU時間の多いSQLがないか確認します。
・db file sequential read
データファイルの単一のブロックをバッファキャッシュに読み込む待機時間です。
インデックススキャンやテーブルのrowidスキャンの際に発生します。
こちらも基本的には多く発生するイベントになります。
この待機時間が多い場合は、インデックスが適切に使用できているか、行連鎖・行移行が発生していないか、バッファキャッシュが不足していないかを確認します。
・db file scattered read
データファイルの複数のブロックをバッファキャッシュに読み込む待機時間です。
フルスキャンの際に発生します。
こちらも基本的には多く発生するイベントになります。
この待機時間が多い場合は、インデックスの追加、テーブルのパーティション化を検討します。
・log file sync
トランザクションのコミット時にLGWRプロセスがREDOログバッファをREDOログファイルに書き込む待ち時間です。
この待機時間が多い場合はI/O性能が低下している、コミット数が多すぎるなどの原因が考えられます。
・buffer busy waits
バッファキャッシュのデータブロックが他のプロセスで使用している場合の待機時間です。
改善には表やインデックスのパーティション化が有効です。
・enq: TX - row lock contention
行レベルでのロックによる競合のために発生した待機時間です。
待機時間が多い場合はAWRの「Segments by Row Lock Waits」の項目で待機が多く発生しているオブジェクトを確認します。
・log buffer space
REDOログバッファが不足し、書き込みを待機する時間です。
REDOログバッファのサイズが不足しているか、コミット頻度が高すぎる可能性があります。
・SQL*Net message from client
クライアント側からのメッセージを待機する時間です。
待機時間が多い場合はアプリケーション側の状況を確認します。
・library cache lock
ライブラリキャッシュのオブジェクトに対するロックの待機時間です。
待機時間が多い場合はDDL文によってライブラリキャッシュのオブジェクトにロックがかけられていないか確認します。
・free buffer waits
バッファキャッシュで使用できるバッファが不足している際の待機時間です。
バッファキャッシュを拡張するか、I/Oが過剰なSQLがないかを確認します。