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 CPU | CPUで実際に処理した時間 | SQL処理・ソート・ハッシュ結合が重い |
| sql execute elapsed time | SQL実行時間(待機を含む) | 重いSQLが存在 → PART 05 |
| parse time elapsed | 解析(パース)時間 | ハードパースが多い可能性 |
| hard parse elapsed time | ハードパースのCPU時間 | バインド変数未使用の可能性 |
| PL/SQL execution elapsed time | PL/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 Profile の Hard Parses/s と Parses/s の比率を確認します。
⚠️ ハードパース多発の主な原因
① バインド変数を使わずにリテラル値をSQLに直接埋め込んでいる
② cursor_sharing = EXACTのままバインド変数未使用
③ session_cached_cursors が小さい
ハードパースの原因となるSQLは PART 05 — SQL Statisticsのparse callsランキング(定義書) の SQL ordered by Parse Calls で確認できます。