Oracleパフォーマンスチューニングの基礎:メモリーコンポーネントを理解して高速化せよ!

Oracle Master Gold

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 PoolSQL文やPL/SQLの解析結果を保持小さいと毎回ハードパース
Redo Log BufferREDOログを書き込む前の一時保存小さいと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_TARGETWindows環境など
ASMM(Automatic Shared Memory Management)SGAのみ自動、PGAは個別管理SGA_TARGET / PGA_AGGREGATE_TARGETLinux等では主流

💡 注意: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 EditionStandard 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$ビューでメモリー使用状況を可視化しよう


[参考]
パフォーマンス・チューニングの概要

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました