Gblog

おもにTips

AWR - CPU分析

見るべきポイントでちょこっと書きましたが、CPU分析の観点で整理。相変わらず 11.2.0.4 です。ごめんなさい。

最初に確認するのはいつもどおり。

  • Top 10 Foreground Events by Total Wait Time

DB CPU が高い(最上位)の場合、これはヘルシーとも言えますが CPU を無駄に使っている可能性もあります。どれぐらい CPU を使うのかが適切なのかは分かりません。2 つの観点から無駄に CPU を消費しているか考えます。

  1. SQLの実行(Execution) で消費するCPU
  2. SQLの解析(PARSE) で消費するCPU

 

まずは1つ目。SQLの実行で消費するCPU。

CPU 使用量はメモリアクセス量に応じて増えるので、ブロックアクセスが多いと CPU消費量が増加します。つまり、実行計画がバカだと CPU は無駄に使われます。

なので、バッファアクセスが多い SQL を確認。

  • SQL ordered by Gets

あとは、CPU時間が長い SQL を確認

  • SQL ordered by CPU time

バッファアクセス、CPU時間が多いSQLがいる場合は、チューニングで軽減できないか確認。速いSQLでも実行回数が多ければチューニングによる効果は大きくなります。

 

2つ目。SQLの解析(PARSE) は CPU コストが高い処理です。そもそも、PARSE 時間は長いんだっけ?というところから確認します。

  • Time Model Statistics
    parse time elapsed
  • Other Instance Activity Stats
    parse time cpu

parse time elapsed はソフトパースとハードパースの両方の時間の合計です。hard parse elapsed time とかもあるので必要に応じて確認します。

PARSEの時間が長いような場合には、以下を確認。

  • SQL ordered by Parse Calls
  • SQL ordered by Version Count

こんな感じでSQLまでブレイクダウンして改善の余地が無いか確認していきます。

 

ちなみに、この他には、再帰SQLの CPU 時間やバックグラウンドプロセスで消費している可能性もあるので・・・。

  • Time Model Statistics
    background cpu time
  • Other Instance Activity Stats
    recursive cpu usage

なんかも見たりします。