Oracleのメモリ管理アーキテクチャ完全解説:SGAとPGAの構造、管理方式、監視方法

Oracle Master Bronze

Oracle Databaseの安定運用・高パフォーマンス実現の鍵は、メモリの適切な管理にあります。
本記事では、Oracleのメモリ構成(SGA・PGA・UGA・コード領域)をわかりやすく解説し、メモリ管理方式(AMM、ASMM、手動)と監視方法、さらに具体的なSQL例やビューについても図解付きで詳しく説明します。

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

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


1. Oracleの基本メモリ構造

Oracleインスタンスが起動すると、以下のようなメモリ領域が割り当てられます。

【Oracle Databaseのメモリ構成】

+------------------------------------------------------+
| Software Code Areas(実行コード領域) |
+------------------------------------------------------+
| ┌────────────┬──────────┬───────────┐ |
| │ SGA │ PGA │ UGA │ |
| │ (共有領域) │ (個別領域)│ (セッション情報)│ |
| └────────────┴──────────┴───────────┘ |
| |
| ・SGA:全プロセスで共有されるメモリ領域 |
| ・PGA:各プロセス(専用/バックグラウンド)の私有領域 |
| ・UGA:ユーザーセッションに紐づくデータを格納 |
+------------------------------------------------------+
  • SGA(System Global Area)
    データキャッシュやSQLパース結果、制御情報を格納する共有メモリ。全プロセスで共用。
  • PGA(Program Global Area)
    ソート領域やワークエリアなど、各サーバープロセス専用の私有メモリ領域。
  • UGA(User Global Area)
    ユーザーセッションごとの一時的なデータを格納。共有サーバー環境ではSGA内に置かれる。
  • Software Code Area
    Oracleソフトウェアの実行コードが読み込まれる読み取り専用領域。


SGAについては詳細はコチラ。


2. メモリ管理方式の概要

Oracleでは、以下のいずれかの方式でメモリを管理します。

2.1 自動メモリ管理(AMM:Automatic Memory Management)

  • MEMORY_TARGET を設定することで、SGAとPGAを統合的に自動管理します。
  • Oracleが動的に領域を調整し、全体の最適化を図ります。
ALTER SYSTEM SET MEMORY_TARGET = 2G SCOPE=SPFILE;
ALTER SYSTEM SET MEMORY_MAX_TARGET = 4G SCOPE=SPFILE;

2.2 自動共有メモリ管理(ASMM:Automatic Shared Memory Management)

  • SGA_TARGET および PGA_AGGREGATE_TARGET を個別に指定。
  • SGAのみ自動的に配分され、PGAは指定した目標値で管理されます。
ALTER SYSTEM SET SGA_TARGET = 1.5G SCOPE=BOTH;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 512M SCOPE=BOTH;
ALTER SYSTEM SET SGA_MAX_SIZE = 2G SCOPE=SPFILE;

2.3 手動管理(Manual Memory Management)

  • SHARED_POOL_SIZE, DB_CACHE_SIZE, LOG_BUFFER など、各領域を手動で設定。
  • 柔軟性はあるものの、運用管理が煩雑になるため現在は非推奨。

3. メモリ管理方式の選択図解

【メモリ管理の方式選択フロー】

ユーザーによる構成方針

┌────────────┐
│ メモリ管理方式 │
└────────────┘
↓ ↓ ↓
AMM ASMM + PGA Manual
(MEMORY_TARGET) (SGA_TARGET) (個別パラメータ)
↓ ↓ ↓
Oracleが動的に最適配分を実施(AMM/ASMM)

4. SGA・PGAの構成要素と役割

4.1 SGAの構成要素

コンポーネント説明
Shared PoolSQL解析結果・PL/SQL・辞書情報を格納(Library Cache / Dictionary Cache)
Database Buffer Cacheデータファイルの読み取りブロックをキャッシュする領域
Redo Log Bufferトランザクション変更をログファイルへ書き込む前に一時保存
Java PoolJavaコード(JVM/Java Stored Procedures)実行時のメモリ領域
Large PoolRMAN・並列実行・共有サーバー処理などで使用
Streams PoolOracle Streams 用メモリ領域(現在は利用頻度低)

4.2 PGAの主な用途

  • ソート処理
  • ハッシュジョイン
  • ワークエリアの一時データ保持

4.3 UGAの概要

  • セッション情報やカーソル情報を保持
  • 専用サーバー:PGA内
  • 共有サーバー:SGA内に格納される

5. 各管理方式におけるパラメータ設定例

管理方式設定パラメータ
AMMMEMORY_TARGET, MEMORY_MAX_TARGET
ASMMSGA_TARGET, SGA_MAX_SIZE, PGA_AGGREGATE_TARGET
ManualSHARED_POOL_SIZE, DB_CACHE_SIZE, LOG_BUFFER など

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

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


6. メモリ使用状況の監視ビュー

以下の動的パフォーマンスビューを使用して、メモリ状況を監視できます。

ビュー名内容
V$SGAINFOSGAの各構成要素のサイズ
V$PGASTATPGA全体の統計情報(最大使用量など)
V$SGASTATSGA構成要素ごとの詳細な割当状況
V$MEMORY_DYNAMIC_COMPONENTSメモリコンポーネントの現在値・操作履歴など

監視SQLの例:

SELECT COMPONENT, CURRENT_SIZE FROM V$MEMORY_DYNAMIC_COMPONENTS;
コマンド実行例

SQL> SELECT COMPONENT, CURRENT_SIZE FROM V$MEMORY_DYNAMIC_COMPONENTS;

COMPONENT CURRENT_SIZE
---------------------------------------- ------------
shared pool 234881024
large pool 16777216
java pool 16777216
streams pool 0
unified pga pool 0
SGA Target 922746880
memoptimize buffer cache 0
DEFAULT buffer cache 587202560
KEEP buffer cache 0
RECYCLE buffer cache 0
DEFAULT 2K buffer cache 0
DEFAULT 4K buffer cache 0
DEFAULT 8K buffer cache 0
DEFAULT 16K buffer cache 0
DEFAULT 32K buffer cache 0
Shared IO Pool 50331648
Data Transfer Cache 0
In-Memory Area 0
In Memory RW Extension Area 0
In Memory RO Extension Area 0
PGA Target 620756992
ASM Buffer Cache 0

22 rows selected.

7. V$MEMORY_DYNAMIC_COMPONENTS の列定義

このビューは、SGAにおける動的メモリサイズの変更状況を示します。すべてのサイズはバイト単位で表されます。

列名データ型説明
COMPONENTVARCHAR2(64)コンポーネント名
CURRENT_SIZENUMBER現在のサイズ
MIN_SIZENUMBER最小サイズ(起動後)
MAX_SIZENUMBER最大サイズ(起動後)
USER_SPECIFIED_SIZENUMBERユーザー指定のサイズ
OPER_COUNTNUMBER変更回数
LAST_OPER_TYPEVARCHAR2(13)最後の操作タイプ(GROW/SHRINKなど)
LAST_OPER_MODEVARCHAR2(9)操作モード(IMMEDIATE等)
LAST_OPER_TIMEDATE最後の操作時刻
GRANULE_SIZENUMBER増減時の単位(グラニュールサイズ)

8. メモリ管理のメリットとリスク

✅ 適切な設定のメリット

  • SQL解析の高速化(Shared Pool)
  • ディスクI/O削減(Buffer Cache)
  • 安定したトランザクション処理(Redo Log Buffer)
  • 並列処理やバックアップの安定性向上(Large Pool)

⚠️ 不適切な設定のリスク

  • SQL再解析が多発 → CPU使用率増加
  • ディスクI/O増大 → レスポンス悪化
  • REDO書き込み遅延 → コミット遅延・ロック競合
  • PGA不足 → ソート失敗・TEMP過剰使用

9. メモリ領域ごとの管理方式まとめ図

【管理方式別:メモリ領域の配分イメージ】

+----------------------------------+
| MEMORY_TARGET=4G |
+----------------------------------+
| [ AMM(自動) ] |
| +--------------+-------------+ |
| | SGA | PGA | |
| +--------------+-------------+ |
+----------------------------------+

+-------------------------------+
| [ ASMM + PGA_AGGREGATE ] |
| SGA自動 / PGA手動 |
+-------------------------------+

+-------------------------------+
| [ Manual Management ] |
| 各パラメータを手動設定 |
+-------------------------------+

まとめ

Oracleのメモリ管理は、性能と安定性を左右する最重要要素の一つです。
AMMやASMMを活用することで、動的かつ効率的なリソース配分が可能となり、管理者の負担を軽減できます。
一方で、メモリ不足や偏りは深刻なパフォーマンス劣化を引き起こすため、ビューによる定期的な監視と適切な設計・検証が不可欠です。

[参考]
5.4.1 メモリー管理について

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

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

コメント

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