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 Advisory
項目名意味影響箇所・着目点
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 によるメモリ動的変更の確認
項目の意味と着目点 — Cache Size Changes
項目名意味影響箇所・着目点
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 Advisory
項目名意味影響箇所・着目点
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 Memory Summary
項目名意味影響箇所・着目点
SGA RegionSGA リージョン名Database Buffers / Fixed Size / Redo Buffers / Variable Size の4種
Begin Size (Bytes)スナップ開始時点のサイズ(バイト)÷1,048,576 で MB 換算
End Size (Bytes)スナップ終了時点のサイズ(バイト)Begin と差異がある場合は ASMM による動的変更が発生
Database BuffersBuffer Cache が占有するメモリ(バイト)最大のリージョン。Cache Size Changes の変更と対応
Variable SizeShared Pool・Large Pool・Java Pool・Stream Pool の合計増加すると Shared Pool 等が拡大。Database Buffers と逆の動きをする
Fixed SizeOracle 内部ヘッダ領域(変更不可)Oracle バージョンごとに固定値
Redo Buffersredo 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 事後調査
項目の意味と着目点 — SGA Breakdown Difference
項目名意味影響箇所・着目点
PoolSGA プール種別(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 と照合
KGLH0Library 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 のカーソルメモリ増大の診断
項目の意味と着目点 — SQL Memory Statistics
項目名意味影響箇所・着目点
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
% DiffBegin から End への変化率Total Cursors の大幅な減少(マイナス)は Library Cache の無効化を示す

7. init.ora Parameters— 初期化パラメータ

何を表すか: スナップ取得時点の全初期化パラメータ(隠しパラメータ含む)の設定値。デフォルト値と異なる設定・スナップ間で変化したパラメータのみが表示される環境もある。

  • 読み方: 性能に直結するパラメータ(SGA/PGA サイズ・最適化設定・プロセス数)を重点確認。End value が表示されているパラメータは期間中に動的変更があった証拠。
  • 閾値・注意点: _ から始まるパラメータは隠しパラメータ(サポート外の動作変更)。変更する場合は Oracle Support の確認必須。
  • 関連セクション: Report Header(SGA/PGA サイズ確認) / すべての Advisory セクション
  • 使うシーン: 環境再現・構成確認・他環境との差分比較
性能診断で確認すべき主要初期化パラメータ
項目名意味影響箇所・着目点
compatibleOracle 互換モードのバージョンOracle 12c 以降の機能を使う際に互換バージョンが制限になることがある
optimizer_features_enableCBO 最適化機能のバージョン設定アップグレード後に古いバージョンを指定している場合は最適化機能が制限される
sga_targetASMM による SGA 自動管理の目標サイズSGA Target Advisory と照合してサイジングを評価
sga_max_sizeSGA の最大サイズ(動的増設の上限)sga_target と一致している場合は増設に再起動が必要
pga_aggregate_target全セッションの PGA 合計目標値PGA Memory Advisory と照合。Temp スピルが多い場合は増設を検討
shared_pool_sizeShared Pool サイズ(0 = ASMM 自動配分)0 でない場合は手動固定。Shared Pool Advisory の飽和点と比較
db_block_sizeOracle データブロックサイズ(バイト)通常 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_sharingSQL テキストのバインド変数自動変換設定EXACT(デフォルト)は変換なし。FORCE は自動変換するがプラン劣化のリスクあり
optimizer_modeSQL 最適化モード(ALL_ROWS / FIRST_ROWS 等)ALL_ROWS がスループット最適。FIRST_ROWS 系はレスポンスタイム最適
db_file_multiblock_read_countFull Table Scan 時の一括読込ブロック数大きいほど FTS のスループットが上がるが I/O 特性により最適値が変わる
db_writer_processesDBWn プロセス数CPU 数が多い / I/O が多い環境では 2〜4 に増やすことで書込スループット改善
undo_managementUndo 管理方式(AUTO / MANUAL)AUTO(自動 Undo 管理)が推奨。MANUAL は 10g 以前の旧方式
undo_retentionUndo 保持時間の目標(秒)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を確認」→「メモリ・パラメータで裏付け」という順序が最も効率的です。全セクションを隅から隅まで読む必要はなく、ボトルネックの仮説を立てて必要なセクションを参照するスタイルで診断を進めましょう。