1. Shared Pool Advisory— Shared Pool サイジング勧告
何を表すか: Shared Pool サイズを仮想的に変化させたときの Est LC Time Saved(Library Cache の時間節約量)と Est LC Load Time(ロード時間)の推計値。適切な Shared Pool サイズを判断する。
- 読み方: Est LC Time Saved Factr = 1.0 になるサイズが「必要十分な最小値」。それ以上増やしても Factr は変わらない(飽和点)。現在サイズが飽和点に達していれば適切。
- 閾値・注意点: SP Size Factr = 1.0 行が現在の Shared Pool サイズに対応する。Est LC Load Time が極端に大きいサイズでは起動直後のパフォーマンスが悪化する。SGA_TARGET を使用している場合は shared_pool_size = 0 のまま自動配分されていることが多い。
- 関連セクション: Library Cache Activity / SGA Target Advisory / init.ora Parameters(shared_pool_size)
- 使うシーン: Shared Pool のサイズ適正確認・縮小可否の判断
| 項目名 | 意味 | 影響箇所・着目点 |
|---|---|---|
| Shared Pool Size (M) | 仮想的な Shared Pool サイズ(MB) | SP Size Factr = 1.0 の行が現在設定値 |
| SP Size Factr | 現在サイズに対する倍率 | 1.0 が現在値の基準 |
| Est LC Size (M) | 推定 Library Cache 使用量(MB) | Shared Pool のうち Library Cache が占める割合の参考値 |
| Est LC Mem Obj | 推定 Library Cache オブジェクト数 | SQL の種類数に相関 |
| Est LC Time Saved (s) | Library Cache ヒットによる推定時間節約量(秒) | 飽和点:これ以上増やしても値が変わらないサイズが最小推奨値 |
| Time Saved Factr | 現在値に対する時間節約量の倍率 | 1.0 未満になるサイズは Shared Pool 不足の可能性 |
| Est LC Load Time (s) | Library Cache 再ロードに要する推定時間(秒) | 小さいほど良好。縮小すると増加する |
| Est LC Mem Obj Hits | 推定 Library Cache ヒット回数 | 大きいほどキャッシュが有効に機能している |
2. Cache Size Changes— キャッシュサイズ変更履歴
何を表すか: スナップショット間でサイズが変化したキャッシュコンポーネントとその変化量を記録する。ASMM(Automatic Shared Memory Management)による自動リサイズの追跡に使う。
- 読み方: Difference が負 → そのコンポーネントが縮小(メモリを他に譲渡)。正 → 拡大。縮小された直後に ORA-4031 等が発生していないか、Wait Events と照合する。
- 関連セクション: Memory Dynamic Components / SGA Breakdown Difference
- 使うシーン: ASMM によるメモリ動的変更の確認
| 項目名 | 意味 | 影響箇所・着目点 |
|---|---|---|
| Snap ID | 変更が発生したスナップ ID | どのスナップ間で変更が起きたかを特定 |
| Cache | 変更されたコンポーネント名 | Java Pool / Buffer Cache / Shared Pool 等 |
| Prior Size (MB) | 変更前のサイズ(MB) | — |
| New Size (MB) | 変更後のサイズ(MB) | — |
| Difference (MB) | 変化量(MB)。正=増加、負=縮小 | 縮小後に ORA-04031 が発生していないか Wait Events を確認 |
3. SGA Target Advisory— SGA 全体サイジング勧告
何を表すか: SGA_TARGET を仮想的に変化させたときの推計 DB Time と物理読込数。SGA 全体の適正サイズを判断する。Buffer Pool Advisory が Buffer Cache のみを評価するのに対し、こちらは SGA 全体の影響を評価する。
- 読み方: Est DB Time Factor = 1.0 になるサイズが「飽和点」。現在サイズが既に飽和点なら増やしても効果なし。縮小時に Est DB Time が急増するサイズが「安全下限」。
- 関連セクション: Buffer Pool Advisory / Shared Pool Advisory / init.ora Parameters(sga_target)
- 使うシーン: サーバメモリの再配分計画・仮想環境でのメモリ削減検討
| 項目名 | 意味 | 影響箇所・着目点 |
|---|---|---|
| SGA Target Size (M) | 仮想的な SGA_TARGET 値(MB) | SGA Size Factor = 1.0 の行が現在設定値 |
| SGA Size Factor | 現在値に対する倍率 | 0.5 / 1.0 / 1.5 / 2.0 等で比較 |
| Est DB Time (s) | 推定 DB Time(秒) | 縮小時に急増するサイズが安全下限の目安 |
| Est DB Time Factor | 現在値に対する DB Time の倍率 | 1.0 未満(改善)になるサイズは増設効果あり |
| Est Physical Reads | 推定物理読込数 | 縮小すると Buffer Cache が減り物理読込が増える。増加幅を確認 |
4. SGA Memory Summary— SGA メモリ総量
何を表すか: SGA の各リージョン(Database Buffers / Fixed Size / Redo Buffers / Variable Size)の開始・終了時バイト数を示す。スナップ間で変化があった場合のみ End Size が表示される。
- 読み方: Begin と End の差額 = スナップ間の SGA 総量変化。Variable Size の減少は Shared Pool 等の動的縮小を意味する。Database Buffers の増減は Buffer Cache の変動。
- 関連セクション: SGA Breakdown Difference / Cache Size Changes
- 使うシーン: SGA 全体のバランス確認・OS レベルのメモリ検証
| 項目名 | 意味 | 影響箇所・着目点 |
|---|---|---|
| SGA Region | SGA リージョン名 | Database Buffers / Fixed Size / Redo Buffers / Variable Size の4種 |
| Begin Size (Bytes) | スナップ開始時点のサイズ(バイト) | ÷1,048,576 で MB 換算 |
| End Size (Bytes) | スナップ終了時点のサイズ(バイト) | Begin と差異がある場合は ASMM による動的変更が発生 |
| Database Buffers | Buffer Cache が占有するメモリ(バイト) | 最大のリージョン。Cache Size Changes の変更と対応 |
| Variable Size | Shared Pool・Large Pool・Java Pool・Stream Pool の合計 | 増加すると Shared Pool 等が拡大。Database Buffers と逆の動きをする |
| Fixed Size | Oracle 内部ヘッダ領域(変更不可) | Oracle バージョンごとに固定値 |
| Redo Buffers | redo log buffer(log_buffer パラメータ) | 通常変化しない。大きすぎると LGWR 書込間隔が長くなる可能性 |
5. SGA Breakdown Difference— SGA 内訳差分
何を表すか: Pool(shared / java / large)と Name(KGLH0 / SQLA / free memory など)レベルでの Begin MB → End MB と % Diff。SGA 内部のどのコンポーネントが増減したかを細かく追跡する。
- 読み方: free memory の大幅減少 → 実際にメモリが使用された証拠。SQLA(SQL Area)の増加 → カーソルが増えた。KGLH0(Library Cache Headers)の変化 → SQL オブジェクト数の変化。
- 閾値・注意点: % Diff が「########」 は Begin = 0(新規割当)を意味する。free memory が極端に少ない(数 MB 以下)場合は ORA-4031 のリスクが高まる。
- 関連セクション: Cache Size Changes / SQL Memory Statistics
- 使うシーン: SGA 内部の詳細変化追跡・ORA-4031 事後調査
| 項目名 | 意味 | 影響箇所・着目点 |
|---|---|---|
| Pool | SGA プール種別(shared / java / large / SGA root) | shared が最重要。java pool の変化は ASMM による自動縮小が多い |
| Name | コンポーネント名(SQLA / KGLH0 / free memory 等) | free memory の減少がどのコンポーネントの増加に対応しているかを確認 |
| Begin MB | スナップ開始時点のサイズ(MB) | — |
| End MB | スナップ終了時点のサイズ(MB) | — |
| % Diff | 変化率(%) | 「########」は Begin=0(新規割当)。free memory が大幅減少していれば Shared Pool の消費増大 |
| SQLA(SQL Area) | ライブラリキャッシュ上の SQL カーソルメモリ | 増加は SQL カーソル増加。SQL Memory Statistics と照合 |
| KGLH0 | Library Cache ヘッダ(オブジェクトハンドル) | SQL オブジェクト数に比例。増加は Library Cache の拡大を意味する |
| free memory | 未使用の Shared Pool 空き領域 | 極端に小さい場合(数 MB 以下)は ORA-04031 のリスクあり |
6. SQL Memory Statistics— SQL メモリ統計
何を表すか: Library Cache 上のカーソルに関するメモリ統計(Avg Cursor Size / Cursor to Parent ratio / Total Cursors / Total Parents)のスナップ間変化。カーソルの肥大化や共有状況を評価する。
- 読み方: Avg Cursor Size 増加 → 1 つのカーソルが消費するメモリが増えている(プラン複雑化)。Cursor to Parent ratio 増加 → 同一 SQL(Parent)に対して複数の子カーソルが増えている(バインドピーク差異、Session 間の設定差異)。Total Cursors 減少 → カーソルが解放された(Shared Pool フラッシュや age-out)。
- 閾値・注意点: AWR と異なり STATSPACK では SQL Memory Statistics は簡易サマリのみ。Cursor to Parent ratio > 5 程度が続く場合はカーソル共有の問題を疑う。
- 関連セクション: SGA Breakdown Difference(SQLA)/ Library Cache Activity / init.ora Parameters(open_cursors / session_cached_cursors)
- 使うシーン: Shared Pool のカーソルメモリ増大の診断
| 項目名 | 意味 | 影響箇所・着目点 |
|---|---|---|
| Avg Cursor Size (KB) | カーソル1件あたりの平均メモリ消費量(KB) | 増加傾向なら SQL の複雑化またはカーソル増殖が進んでいる |
| Cursor to Parent ratio | 親カーソル(SQL テキスト)1件あたりの子カーソル数 | 5 超は子カーソル増殖の問題。cursor_sharing やバインドピーク設定を確認 |
| Total Cursors | 現在キャッシュされている子カーソル総数 | 大幅減少は Shared Pool フラッシュや DDL による無効化が発生したサイン |
| Total Parents | 現在キャッシュされている親カーソル(SQL テキスト)総数 | Total Cursors / Total Parents ≒ Cursor to Parent ratio |
| % Diff | Begin から End への変化率 | Total Cursors の大幅な減少(マイナス)は Library Cache の無効化を示す |
7. init.ora Parameters— 初期化パラメータ
何を表すか: スナップ取得時点の全初期化パラメータ(隠しパラメータ含む)の設定値。デフォルト値と異なる設定・スナップ間で変化したパラメータのみが表示される環境もある。
- 読み方: 性能に直結するパラメータ(SGA/PGA サイズ・最適化設定・プロセス数)を重点確認。End value が表示されているパラメータは期間中に動的変更があった証拠。
- 閾値・注意点: _ から始まるパラメータは隠しパラメータ(サポート外の動作変更)。変更する場合は Oracle Support の確認必須。
- 関連セクション: Report Header(SGA/PGA サイズ確認) / すべての Advisory セクション
- 使うシーン: 環境再現・構成確認・他環境との差分比較
| 項目名 | 意味 | 影響箇所・着目点 |
|---|---|---|
| compatible | Oracle 互換モードのバージョン | Oracle 12c 以降の機能を使う際に互換バージョンが制限になることがある |
| optimizer_features_enable | CBO 最適化機能のバージョン設定 | アップグレード後に古いバージョンを指定している場合は最適化機能が制限される |
| sga_target | ASMM による SGA 自動管理の目標サイズ | SGA Target Advisory と照合してサイジングを評価 |
| sga_max_size | SGA の最大サイズ(動的増設の上限) | sga_target と一致している場合は増設に再起動が必要 |
| pga_aggregate_target | 全セッションの PGA 合計目標値 | PGA Memory Advisory と照合。Temp スピルが多い場合は増設を検討 |
| shared_pool_size | Shared Pool サイズ(0 = ASMM 自動配分) | 0 でない場合は手動固定。Shared Pool Advisory の飽和点と比較 |
| db_block_size | Oracle データブロックサイズ(バイト) | 通常 8192 バイト(8KB)。変更は DB 再作成が必要 |
| processes | 最大プロセス数 | 不足すると ORA-00020 (max processes exceeded) が発生 |
| sessions | 最大セッション数 | 不足すると ORA-00018 が発生。通常 processes × 1.5 + 22 が推奨値 |
| open_cursors | セッションあたりの最大オープンカーソル数 | 不足すると ORA-01000 が発生。JDBC アプリは 300〜500 が一般的 |
| session_cached_cursors | セッションあたりのカーソルキャッシュ数 | 小さいと Execute to Parse % が低下する。50〜100 が推奨目安 |
| cursor_sharing | SQL テキストのバインド変数自動変換設定 | EXACT(デフォルト)は変換なし。FORCE は自動変換するがプラン劣化のリスクあり |
| optimizer_mode | SQL 最適化モード(ALL_ROWS / FIRST_ROWS 等) | ALL_ROWS がスループット最適。FIRST_ROWS 系はレスポンスタイム最適 |
| db_file_multiblock_read_count | Full Table Scan 時の一括読込ブロック数 | 大きいほど FTS のスループットが上がるが I/O 特性により最適値が変わる |
| db_writer_processes | DBWn プロセス数 | CPU 数が多い / I/O が多い環境では 2〜4 に増やすことで書込スループット改善 |
| undo_management | Undo 管理方式(AUTO / MANUAL) | AUTO(自動 Undo 管理)が推奨。MANUAL は 10g 以前の旧方式 |
| undo_retention | Undo 保持時間の目標(秒) | Tuned Retention が設定値を大幅に上回る場合は自動拡張が機能している |
| statistics_level | 統計収集レベル(TYPICAL / ALL / BASIC) | TYPICAL が標準。BASIC にすると Advisory が動作しない |
| timed_statistics | 時間統計収集の有効/無効 | TRUE 必須。FALSE だと Wait Events の時間情報が収集されない |
| parallel_max_servers | 最大パラレルスレーブ数 | DBMS_STATS 等のパラレル処理の上限。CPU 数 × 2 が一般的な目安 |
| _(隠しパラメータ) | アンダースコアで始まる非公開パラメータ | 変更理由と Oracle Support の推奨有無を必ず確認する |
8. 総合サマリ — STATSPACK 診断の進め方
STATSPACK 全 10 パートを読み終えた後、診断結果を整理して優先度付けをする際の標準的な進め方を以下にまとめる。
| 優先度 | 判断基準 | 確認すべきセクション | 推奨アクション |
|---|---|---|---|
| 🔴 高(即対応) | DB Time の 20% 超を占める待機イベントまたは SQL が存在する。ORA-1555 / ORA-04031 等のエラーが発生している。Buffer Hit% < 90% またはロック競合で Failed Gets > 0 | Top 5 Timed Events / SQL ordered by Elapsed / Enqueue Activity / Undo Summary | 原因 SQL のアクセスパス改善・索引追加・メモリ増設・ロック競合の業務設計見直し |
| 🟡 中(計画的対応) | Execute to Parse % が低い(50% 未満)。特定のセグメントへの物理読込集中(%Total > 30%)。Version Count が 20 超のカーソルが存在する | Instance Efficiency / Segments by Physical Reads / SQL ordered by Version Count | session_cached_cursors 調整・索引設計見直し・cursor_sharing 設定確認 |
| 🟢 低(継続監視) | Advisory での推奨は現在から 10% 未満の改善しか見込めない。Latch / Mutex 待機は存在するが Wait Time が DB Time の 1% 未満 | Buffer Pool Advisory / PGA Memory Advisory / Shared Pool Advisory / Latch Activity | 現状維持。定期的な STATSPACK 収集によるトレンド監視 |
| ✅ 確認事項 | init.ora の隠しパラメータ変更有無・timed_statistics = TRUE・statistics_level が BASIC になっていないか | init.ora Parameters | 変更があれば理由と影響を記録。BASIC の場合は TYPICAL に戻す |
STATSPACKの診断は「Top 5 Timed Events で待機 or CPU を判別」→「原因 SQL を特定」→「セグメントとI/Oを確認」→「メモリ・パラメータで裏付け」という順序が最も効率的です。全セクションを隅から隅まで読む必要はなく、ボトルネックの仮説を立てて必要なセクションを参照するスタイルで診断を進めましょう。