CPU高負荷の症状

以下のサインがあればCPU高負荷を疑います。

  • Top 5 Eventsの1位が CPU time
  • Time Model System Stats の DB CPU / DB Time が 80%超
  • Load Profile の Hard Parses/s が高い
  • Instance Efficiency の Library Hit % が低い

全体フローは PART 01、ヘルスチェックは PART 02 — ヘルスチェック を先に確認してください。

Time Model System Stats を確認する

STATSPACKの Time Model System Stats はAWRと同様の内訳情報を提供します。 DB Timeに占める各項目の割合(% DB Time)が診断の起点です。

Time Model 項目意味高い場合の診断
DB CPUCPUで実際に処理した時間SQL処理・ソート・ハッシュ結合が重い
sql execute elapsed timeSQL実行時間(待機を含む)重いSQLが存在 → PART 05
parse time elapsed解析(パース)時間ハードパースが多い可能性
hard parse elapsed timeハードパースのCPU時間バインド変数未使用の可能性
PL/SQL execution elapsed timePL/SQL実行時間PL/SQLロジックの最適化が必要

Time Model System Statsの詳細は PART 04 — Wait Events Statistics 詳細(定義書) を参照。

CPU関連のWait Eventを読む

CPU高負荷の場合、Top 5 Timed Eventsに「CPU time」が高い割合で現れます。 それに加えて以下の待機イベントが上位に来る場合は要注意です。

Wait Event意味原因
library cache: mutex Xライブラリキャッシュの競合ハードパース過多・カーソル共有不足
latch: library cacheライブラリキャッシュのラッチ競合同上
cursor: pin S wait on Xカーソルの共有競合同一SQLの同時実行
latch: shared pool共有プールのラッチ競合共有プールサイズ不足

Wait Eventの詳細は PART 04 — Wait Eventドリルダウン、Foreground Wait Eventsセクションの定義は PART 04 — Wait Events Statistics 詳細(定義書) を参照。

ハードパース問題を特定する

STATSPACKでもハードパースはCPU使用率を大幅に押し上げます。 Load ProfileHard Parses/sParses/s の比率を確認します。

⚠️ ハードパース多発の主な原因

① バインド変数を使わずにリテラル値をSQLに直接埋め込んでいる
cursor_sharing = EXACTのままバインド変数未使用
session_cached_cursors が小さい

ハードパースの原因となるSQLは PART 05 — SQL Statisticsのparse callsランキング(定義書) の SQL ordered by Parse Calls で確認できます。

CPU高負荷 診断フロー

1
Time Model System Stats で DB CPU % を確認
80%超 → CPUが主ボトルネック。以下のステップへ
2
SQL ordered by CPU で重いSQLを特定
CPU消費TOP SQLを特定 → PART 05 SQL特定
3
Load Profile で Hard Parse比率を確認
5%超 → バインド変数の使用状況を調査
4
Library Cache Activity で miss率を確認