見るべきポイントでちょこっと書きましたが、CPU分析の観点で整理。相変わらず 11.2.0.4 です。ごめんなさい。
最初に確認するのはいつもどおり。
- Top 10 Foreground Events by Total Wait Time
DB CPU が高い(最上位)の場合、これはヘルシーとも言えますが CPU を無駄に使っている可能性もあります。どれぐらい CPU を使うのかが適切なのかは分かりません。2 つの観点から無駄に 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までブレイクダウンして改善の余地が無いか確認していきます。
ちなみに、この他には、再帰SQLの CPU 時間やバックグラウンドプロセスで消費している可能性もあるので・・・。
- Time Model Statistics
background cpu time - Other Instance Activity Stats
recursive cpu usage
なんかも見たりします。