Oracleデータベースのチューニングにおいて「メモリー設定」は最重要ポイントの一つです。
SGAやPGAってそもそも何?
Buffer Cacheって大きければいいの?
自動メモリー管理って本当に信用していいの?
この記事では、そうした疑問を持つ方向けに「Oracleのメモリー構成を基礎から丁寧に解説し、パフォーマンスチューニングへどう活かすか」をテキスト図とSQL例付きでわかりやすくまとめました。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
■ Oracleのメモリーは2大コンポーネントで構成されている
Oracleインスタンスのメモリーは、大きく以下の2つに分類されます。
【Oracleメモリー構成の全体図】
+---------------------------------------+
| メモリー |
+--------------------+------------------+
| SGA(共有メモリー)| PGA(専用メモリー)|
+--------------------+------------------+
| 名称 | 用途 | 特徴 |
|---|---|---|
| SGA | 全セッションで共有される領域 | キャッシュ・解析結果など |
| PGA | 各セッション専用の作業領域 | ソート・ハッシュ結合など |
■ SGA(System Global Area)の内訳と役割
SGAはインスタンス起動時に割り当てられ、全ユーザーで共有されます。SGAの中はさらに複数のコンポーネントに分かれています。
【SGA構成図】
+-------------------------------------------+
| SGA |
| +-------------------------------------+ |
| | Buffer Cache | ← データブロックをキャッシュ
| +-------------------------------------+ |
| | Shared Pool | ← SQLやPL/SQLの解析結果を保持
| +-------------------------------------+ |
| | Redo Log Buffer | ← トランザクションの変更履歴を保存
| +-------------------------------------+ |
| | Large Pool(任意) | ← RMANや並列処理に使う領域
| +-------------------------------------+ |
| | Java Pool(任意) | ← Java関連処理で使用
| +-------------------------------------+ |
| | In-Memory Area(有償オプション) | ← カラム型圧縮メモリー領域
+-------------------------------------------+
🔍 よく使われるコンポーネント詳細
| コンポーネント | 主な役割 | チューニング影響 |
|---|---|---|
| Buffer Cache | データブロックをキャッシュしI/Oを削減 | 小さいと物理I/Oが増加 |
| Shared Pool | SQL文やPL/SQLの解析結果を保持 | 小さいと毎回ハードパース |
| Redo Log Buffer | REDOログを書き込む前の一時保存 | 小さいとLGWR待機が増える |
■ PGA(Program Global Area)の構成と役割
PGAはユーザーセッションごとに割り当てられるメモリー領域で、他のセッションと共有されません。
【PGA構成図】
+-----------------------------+
| PGA(セッション単位) |
+-----------------------------+
| ・ソートバッファ |
| ・ハッシュ結合バッファ |
| ・カーソル管理領域 |
+-----------------------------+
✅ PGAが重要になる場面
- 大量データの ORDER BY
- 複雑な ハッシュ結合(HASH JOIN)
- ソート結合やウィンドウ関数の多用
■ メモリー管理方式:AMMとASMMの違いを理解しよう
Oracleではメモリーを手動 or 自動で管理できます。
| 管理方式 | 内容 | 使用パラメータ | 推奨状況 |
|---|---|---|---|
| AMM(Automatic Memory Management) | SGAとPGAを統合管理 | MEMORY_TARGET / MEMORY_MAX_TARGET | Windows環境など |
| ASMM(Automatic Shared Memory Management) | SGAのみ自動、PGAは個別管理 | SGA_TARGET / PGA_AGGREGATE_TARGET | Linux等では主流 |
💡 注意:AMMはLinux環境で使用制限があるため、通常はASMM(SGA+PGA別管理)がベストプラクティスです。
■ 実践:メモリー関連の確認SQL
以下のSQLで、SGAやPGAの状況をリアルタイムで確認できます。
-- SGAの全体構成を確認
SHOW SGA;
-- 各SGAコンポーネントの現在サイズを確認
SELECT component, current_size/1024/1024 AS size_mb
FROM v$sga_dynamic_components;
-- PGAの統計情報を確認
SELECT name, value
FROM v$pgastat;
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
■ チューニングの現場でよくある症状と対策
| 症状 | 原因 | 対策 |
|---|---|---|
| SQLの応答が遅い | Buffer Cacheが小さい | DB_CACHE_SIZE を増やす |
| 同じSQLが毎回解析される | Shared Poolが小さい / 実行計画共有不可 | SHARED_POOL_SIZE を増やす / バインド変数使用 |
| TEMP使用量が増える | PGA不足 | PGA_AGGREGATE_TARGET を増やす |
■ 自動メモリー設定の確認とチューニング戦略
-- 自動メモリー管理の有効状態確認
SELECT name, value
FROM v$parameter
WHERE name IN (
'memory_target', 'sga_target', 'pga_aggregate_target'
);
チューニングの基本原則:
- キャッシュヒット率が低ければ SGA拡張を検討
- ソートがTEMPを多用していれば PGA拡張を検討
- 無駄な大容量化は避ける(OSメモリと競合)
■ EnterpriseとStandardで違いはある?
メモリー関連の機能(SGA/PGA/自動メモリー管理)は、Oracleのエディションに関係なく利用可能です(※In-Memory Areaなど一部オプションを除く)。
| コンポーネント | Enterprise Edition | Standard Edition |
|---|---|---|
| SGA構成要素 | 〇 | 〇 |
| PGA管理機能 | 〇 | 〇 |
| ASMM/AMM | 〇 | 〇 |
| In-Memory Option | 別途ライセンス必要 | ×(使用不可) |
■ まとめ:メモリーを制する者がOracleを制す
Oracleのメモリー構成を正しく理解し、状況に応じて最適な調整を行うことは、パフォーマンスチューニングの王道です。
✅ 本記事の要点まとめ
✔ OracleのメモリーはSGA(共有)とPGA(専用)で構成
✔ 自動メモリー管理にはAMMとASMMがあり、LinuxではASMM推奨
✔ Buffer CacheとShared PoolのサイズがI/Oと解析コストに直結
✔ PGAは並列処理やソート性能に大きく影響
✔ 定期的にv$ビューでメモリー使用状況を可視化しよう




コメント