Oracleデータベースのパフォーマンスチューニングやアーキテクチャを学ぶ上で、必ず立ちはだかるのが 「SGA」と「PGA」 という2つのメモリ構造です。本記事では、OracleDatabaseのSGAとPGAの違いをテーマに、それぞれの役割や違いを分かりやすく解説します。
記事のポイント
- SGA(System Global Area):全プロセスで共有されるメモリ領域。データキャッシュなどに利用。
- PGA(Program Global Area):各プロセス専用のプライベートメモリ領域。ソート処理などに利用。
- チューニングではそれぞれの用途に応じたパラメータ調整が重要。
Oracleのメモリ・アーキテクチャ概要
Oracle Databaseのメモリ・アーキテクチャを理解するうえで、特に重要なのが SGA(システム・グローバル領域) と PGA(プログラム・グローバル領域) です。
SGAやPGAがワークロードに対して不足すると、物理I/Oの増加やSQLSQL [エスキューエル / シークエル]Structured Query Language。関係データベース(RDB)の管理や操作を行うデータベース言語の再解析、ソート・ハッシュ処理の一時表領域への退避など、さまざまな形でパフォーマンスに影響する可能性があります。それぞれの違いと役割を正しく理解しましょう。
SGA(System Global Area)とは?
SGAは、Oracleインスタンスが起動する際に割り当てられる共有メモリ領域です。 SGAは、同じOracleインスタンスのサーバー・プロセスやバックグラウンド・プロセスから共有して利用されます。
主なコンポーネントと役割
SGAにはいくつかの重要なコンポーネントが含まれています。
-
データベース・バッファ・キャッシュ
データファイルから読み込んだデータを一時的に保存する領域。次に同じデータが必要になった際、ディスクではなくここから読み込むことで高速化を図ります。
-
共有プール(Shared Pool)
実行されたSQL文の解析結果や実行計画などをキャッシュする領域。同一のSQL文に対応する共有SQL領域を再利用できれば、ハードパースの負荷を抑えられます。
-
REDOログ・バッファ
データの変更履歴(REDO情報)をディスクのREDOログ・ファイルに書き込む前に一時的に保持する領域。障害発生時の復旧に利用されます。
[!NOTE]
SGAには他にもラージ・プール(Large Pool)、JavaJava [ジャバ]オブジェクト指向プログラミング言語プール、ストリームズ・プールなどが存在しますが、ここでは初心者がまず押さえておきたい3つのコンポーネントに絞って解説しています。
イメージ: 「オフィスの中央にある共有のホワイトボードや書庫」のようなもので、みんなで参照・更新します。
PGA(Program Global Area)とは?
PGAは、Oracleプロセスごとに確保されるプライベートメモリ領域です。 サーバー・プロセスやバックグラウンド・プロセスがそれぞれ専用に使用するため、他のユーザーやプロセスと共有されることはありません。
主な用途と役割
PGAは主に以下のような用途で使用されます。
-
ソート領域(Sort Area)
SQL文で
ORDER BYやGROUP BYが指定された際のデータの並び替え処理に使われます。ここが不足すると一時表領域(ディスク)が使われ、処理が遅くなります。 -
ハッシュ領域(Hash Area)
ハッシュ結合(Hash Join)を実行する際にデータを展開する領域です。
-
UGA(User Global Area)
セッションに依存する情報を保持する領域です。専用サーバー接続ではUGAはPGAに格納されます。一方、共有サーバー接続ではUGAはSGA側に格納されます。
イメージ: 「各社員に割り当てられた自分専用のデスク」のようなもので、自分の作業(ソートや計算)を行うために使います。
SGAとPGAの違い(比較表)
SGAとPGAの主な違いを分かりやすく表にまとめました。
| 項目 | SGA (System Global Area) | PGA (Program Global Area) |
|---|---|---|
| 領域の性質 | 共有メモリ(全プロセスで共有) | プライベートメモリ(各プロセス専用) |
| 割り当てタイミング | インスタンス起動時に確保され、必要に応じてサイズ調整される | サーバー・プロセスやバックグラウンド・プロセスに対して確保される |
| 主な用途 | データキャッシュ、SQL解析結果の共有、変更履歴の保持 | ソート処理、ハッシュ結合、SQL実行用の作業領域 |
| 自動管理パラメータ | SGA_TARGET | PGA_AGGREGATE_TARGET |
| 不足した時の影響 | 物理I/Oの増加、SQLの再解析など | ソート・ハッシュ処理の一時表領域への退避など |
[!TIP]
Oracle Databaseでは、
MEMORY_TARGETというパラメータを使用してインスタンスで使用するメモリ総量を一括で自動管理するオプションも提供されています。ただし、実務では個別にSGA_TARGETとPGA_AGGREGATE_TARGETを設定して管理する手法も引き続き広く使われており、本記事の知識がそのまま活きます。
SGA・PGAのサイズを確認する方法
実機(SQL*Plusなど)で現在のSGAやPGAのサイズ・設定を確認するには、以下のSQLを実行します。
SGAサイズの確認
-- SGAの合計サイズを確認SHOW PARAMETER sga_target;
-- コンポーネントごとのサイズを確認SELECT * FROM v$sga;PGAサイズの確認
-- インスタンス全体のPGA使用量の目標値を確認SHOW PARAMETER pga_aggregate_target;
-- 現在の使用状況などを確認SELECT name, value, unit FROM v$pgastat;OracleにおけるSGA・PGAのまとめ
- SGAはみんなで共有するメモリ領域(
SGA_TARGETで管理) - PGAは各Oracleプロセスが専用に使用するプライベートなメモリ領域(ソート等の作業領域など)(
PGA_AGGREGATE_TARGETで管理) - どちらが不足してもパフォーマンス低下を招くため、用途に応じたチューニングが必要
それぞれの違いを正しく把握し、障害発生時や遅延が発生した際の切り分けに役立ててください。
[!NOTE]
Oracle Databaseの使い方・設定まとめ
本記事の他にも、Oracle Databaseのアーキテクチャや実務で役立つSQLテクニックを多数紹介しています。あわせてご確認ください!
ITナレッジライフOracle Database 使い方・設定まとめ
Oracle Databaseの使い方・設定まとめページ。Windowsへのインストール手順から、NVL・TRUNC等の必須関数、ROWNUM・UNIONの使い分けなど実務で役立つSQLの応用・チューニング手法まで、初心者から中級者向けに体系的に解説します。
以上で本記事の解説を終わります。
よいITライフを!
人気記事
- 1
- 2
- 3
- 4
- 5

図解が豊富で、概念的な理解に最適。実務に入る前の「全体像把握」に最適な一冊です。