【Oracle】SGAとPGAの違いとは?メモリ構造と役割をわかりやすく解説

【Oracle】SGAとPGAの違いとは?メモリ構造と役割をわかりやすく解説

PR Amazonのアソシエイトとして、ITナレッジライフは適格販売により収入を得ています。

記事の文字数:2,470

Oracleデータベースのメモリ構造であるSGAとPGAの違いをわかりやすく解説します。共有メモリと専用メモリの役割からチューニングの基礎までを網羅しています。

Oracleユーザにお勧めの本 ↗

おすすめ

図解入門よくわかる 最新Oracleデータベースの基本と仕組み[第6版]

難易度
実用性
読みやすさ

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

絵で見てわかるOracleの仕組み 新装版

難易度
実用性
読みやすさ

プロとしてのOracle PL/SQL入門 【第3版】(Oracle 12c、11g、10g対応)

難易度
実用性
読みやすさ

PL/SQLの構文から実践的なテクニックまで網羅。現場でコードを書くなら手元に置きたい一冊です。

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にはいくつかの重要なコンポーネントが含まれています。

  1. データベース・バッファ・キャッシュ

    データファイルから読み込んだデータを一時的に保存する領域。次に同じデータが必要になった際、ディスクではなくここから読み込むことで高速化を図ります。

  2. 共有プール(Shared Pool)

    実行されたSQL文の解析結果や実行計画などをキャッシュする領域。同一のSQL文に対応する共有SQL領域を再利用できれば、ハードパースの負荷を抑えられます。

  3. REDOログ・バッファ

    データの変更履歴(REDO情報)をディスクのREDOログ・ファイルに書き込む前に一時的に保持する領域。障害発生時の復旧に利用されます。

[!NOTE]

SGAには他にもラージ・プール(Large Pool)JavaJava [ジャバ]オブジェクト指向プログラミング言語プールストリームズ・プールなどが存在しますが、ここでは初心者がまず押さえておきたい3つのコンポーネントに絞って解説しています。

イメージ: 「オフィスの中央にある共有のホワイトボードや書庫」のようなもので、みんなで参照・更新します。

PGA(Program Global Area)とは?

PGAは、Oracleプロセスごとに確保されるプライベートメモリ領域です。 サーバー・プロセスやバックグラウンド・プロセスがそれぞれ専用に使用するため、他のユーザーやプロセスと共有されることはありません。

主な用途と役割

PGAは主に以下のような用途で使用されます。

  1. ソート領域(Sort Area)

    SQL文で ORDER BYGROUP BY が指定された際のデータの並び替え処理に使われます。ここが不足すると一時表領域(ディスク)が使われ、処理が遅くなります。

  2. ハッシュ領域(Hash Area)

    ハッシュ結合(Hash Join)を実行する際にデータを展開する領域です。

  3. UGA(User Global Area)

    セッションに依存する情報を保持する領域です。専用サーバー接続ではUGAはPGAに格納されます。一方、共有サーバー接続ではUGAはSGA側に格納されます。

イメージ: 「各社員に割り当てられた自分専用のデスク」のようなもので、自分の作業(ソートや計算)を行うために使います。

SGAとPGAの違い(比較表)

SGAとPGAの主な違いを分かりやすく表にまとめました。

項目SGA (System Global Area)PGA (Program Global Area)
領域の性質共有メモリ(全プロセスで共有)プライベートメモリ(各プロセス専用)
割り当てタイミングインスタンス起動時に確保され、必要に応じてサイズ調整されるサーバー・プロセスやバックグラウンド・プロセスに対して確保される
主な用途データキャッシュ、SQL解析結果の共有、変更履歴の保持ソート処理、ハッシュ結合、SQL実行用の作業領域
自動管理パラメータSGA_TARGETPGA_AGGREGATE_TARGET
不足した時の影響物理I/Oの増加、SQLの再解析などソート・ハッシュ処理の一時表領域への退避など

[!TIP]

Oracle Databaseでは、MEMORY_TARGET というパラメータを使用してインスタンスで使用するメモリ総量を一括で自動管理するオプションも提供されています。ただし、実務では個別に SGA_TARGETPGA_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のまとめ

  1. SGAはみんなで共有するメモリ領域(SGA_TARGET で管理)
  2. PGAは各Oracleプロセスが専用に使用するプライベートなメモリ領域(ソート等の作業領域など)(PGA_AGGREGATE_TARGET で管理)
  3. どちらが不足してもパフォーマンス低下を招くため、用途に応じたチューニングが必要

それぞれの違いを正しく把握し、障害発生時や遅延が発生した際の切り分けに役立ててください。

[!NOTE]

Oracle Databaseの使い方・設定まとめ

本記事の他にも、Oracle Databaseのアーキテクチャや実務で役立つSQLテクニックを多数紹介しています。あわせてご確認ください!

Oracle Database 使い方・設定まとめ
ITナレッジライフ

Oracle Database 使い方・設定まとめ

Oracle Databaseの使い方・設定まとめページ。Windowsへのインストール手順から、NVL・TRUNC等の必須関数、ROWNUM・UNIONの使い分けなど実務で役立つSQLの応用・チューニング手法まで、初心者から中級者向けに体系的に解説します。


以上で本記事の解説を終わります。
よいITライフを!
ITナレッジライフ 運営者
この記事を書いた人

Z (ITナレッジライフ)

現役のITエンジニア。Linux、プログラミング、IT用語など、日々の業務で得た「痒いところに手が届く」技術情報を発信しています。

プロフィールと編集ポリシーを見る

Oracleユーザにお勧めの本 ↗

おすすめ

図解入門よくわかる 最新Oracleデータベースの基本と仕組み[第6版]

難易度
実用性
読みやすさ

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

人気記事


記事を評価

Thanks!
目次
Scroll to Top