Buffer Cache Hit Ratioが99%近くても遅いという相談を受け、原因はPGAのTemp書き込みだったという経験があります。数値の高さだけで安心しないための読み方を整理しています。

メモリ問題の種類

メモリ不足分析図

図1: SGA/PGAメモリ問題の診断フロー

AWRで検出できるメモリ関連の問題は主に以下の3つです。

問題の種類影響見る場所
Buffer Cache不足物理I/O増加、db file読み取り待機増加Instance Efficiency / Buffer Cache Hit Ratio
PGA/ソートエリア不足一時ディスクへのspill、direct path read tempPGA Aggregate Statistics
共有プール(Shared Pool)不足ハードパース増加、ライブラリキャッシュ競合Shared Pool Statistics / Library Cache Activity

全体フローは PART 01、I/Oとの関係は PART 06 I/O分析 を参照。メモリ統計の定義は PART 06 — メモリ・I/O統計の見方(AWR入門) を参照。

Buffer Cache Hit Ratio の見方

Instance Efficiency Percentagesセクションにある Buffer Nowait %Buffer Hit % が重要です。

指標計算式目安
Buffer Hit %1 - (Physical Reads / Logical Reads)95%以上
Library Cache Hit %Pins / (Pins + Reloads)99%以上
Shared Pool Free %共有プールの空き割合10%〜30%を推奨

⚠️ Buffer Hit %の罠

Buffer Hit %が高くても、ブロック数自体が多い(Gets が膨大)場合は非効率なSQLがある可能性があります。絶対値(Gets/秒)も確認してください。

PGA統計の見方

PGA Aggregate Statisticsはソート・ハッシュ結合などのメモリ使用状況を示します。 % Optimal W/A Execs(最適実行の割合)が最重要指標です。

指標意味目安
% Optimal W/A Execsメモリ内で完結したワークエリア実行の割合90%以上が理想
% Onepass W/A Execs1回のディスクspillが発生した割合多い場合はPGA不足
% Multipass W/A Execs複数回のdisk spillが発生した割合0%が理想
Max PGA Target (MB)PGAの最大割当量Multipas が多い場合は増加を検討

PGA/Advisoryの詳細は PART 07 — Advisory / Memory 詳細(定義書) を参照。

Advisory情報の活用

AWRの Advisory セクション(Buffer Pool Advisory / PGA Memory Advisory / SGA Target Advisory)は、 メモリサイズ変更時の効果をシミュレートした情報です。

Advisoryの種類活用方法
Buffer Pool AdvisoryBuffer Cache を増やした場合の物理読み込み削減効果を確認
PGA Memory AdvisoryPGA_AGGREGATE_TARGET 変更時のW/A実行比率改善効果を確認
SGA Target AdvisorySGA全体サイズ変更時のDB Time改善効果を確認

メモリ診断でよくある誤り

メモリ増設を検討する前に、以下の誤診パターンに当てはまっていないか確認する。

誤りのパターンなぜ誤りか正しい確認方法
Buffer Hit %が95%以上なので問題なしと判断 Gets/秒が膨大な場合はキャッシュ効率が良くても絶対I/O量が多い。SQLの非効率が隠れている SQL StatisticsでGetsの多いSQLを確認し、インデックス見直しが先か判断する
% Multipass W/A Execsが出ているのでPGAを増やす 巨大なソートを繰り返すSQLが原因の場合、PGA増加は一時解決にすぎない 該当SQLの実行計画を確認。Hash Joinのメモリ消費量を見てSQLチューニングが先か判断
Shared Pool Free %が低いのでShared Poolを増やす バインド変数未使用によるハードパースが原因なら、Shared Pool増加は根本解決にならない Hard Parsesをチェック。高ければバインド変数の使用がまず必要
Advisory の推奨メモリを即そのまま適用する Advisory はシミュレーションであり、物理メモリ全体やSGA/PGAのバランスを考慮していない Advisory は参考値として使い、他の指標と合わせて設定値を決める

サイジング改善の方向性

メモリ改善の優先順位

① Buffer Cache Hit Ratioが低い → db_cache_size または sga_target の増加を検討
② % Multipass W/A Execs が 0より高い → pga_aggregate_target の増加を検討
③ Shared Pool Free % が低くハードパース多い → shared_pool_size の増加を検討
④ AMM/ASMM使用時は Advisory の推奨値を参考に memory_target を調整