「SGA」と「PGA」の違い

データベース,用語Oracle,メモリ

記事内に広告が含まれています。

Oracle DBにおいてパフォーマンスと安定性を左右する重要なメモリ領域である
「SGA」「PGA」について説明します。

「SGA」とは

正式名称:System Global Area(システムグローバル領域)
SGAはOracle DB 全体で共有されるメモリ領域です。
Oracleに接続しているすべてのユーザーやバックグラウンドプロセスが共通で利用するメモリであり、データベースの性能や安定性に大きな影響を与える非常に重要な領域です。

SGA には、ディスクから読み込まれたデータブロックを一時的に保存する DB Buffer Cache や、SQL文や実行計画、PL/SQLプログラムなどを保存する Shared Pool、更新履歴を記録する Redo Log Buffer などが含まれています。これらのメモリ領域によって、ディスクI/Oの削減やSQLの再利用が可能となり、高速なデータベース処理が実現されています。

SGAが十分に確保されていれば、よく参照されるデータやSQL文をメモリ上で効率よく処理できるため、システム全体の応答性能が向上します。一方で、SGAが不足すると、ディスクアクセスやSQLの再解析が頻発し、パフォーマンスの大幅な低下を招く原因になります。そのため、SGAのサイズ設計とチューニングは、Oracle DB運用における重要なポイントの1つとされています。

「PGA」とは

正式名称:Program Global Area(プログラムグローバル領域)
PGAは1セッションごと専用の作業メモリです。
PGA(Program Global Area)とは、Oracle Database に接続している 各セッションごとに個別に割り当てられる専用のメモリ領域のことです。SGAがデータベース全体で共有されるのに対して、PGAはユーザーやサーバープロセスごとに独立して使用される作業用メモリであり、主にSQLの実行処理を支える役割を担っています。

PGAには、ORDER BY や GROUP BY などのソート処理、テーブル結合(JOIN)、ハッシュ処理、一時的な計算結果などが格納されます。これらの処理はできるだけメモリ上で完結する方が高速なため、PGAが十分に確保されているかどうかは、SQLの実行性能に直結します。

もしPGAの容量が不足してしまうと、ソートや結合処理の一部がディスク上の TEMP 表領域へ退避されるようになり、処理速度が大きく低下します。その結果、「特定のSQLだけが異常に遅い」といった問題が発生することがあります。このため、PGAはDB全体の速度というよりも、「個々のSQL処理の快適さ」を左右するメモリ領域だと言えます。

つまり端的に言えば、

SGA=みんなで使うメモリ(全員で使う会社の共有倉庫)
PGA=自分だけが使う作業メモリ(各社員の机の上)

みたいなイメージです。

以上、本記事では「SGA」と「PGA」の違いについて紹介しました。

システムトラストでは一緒に働いていただける仲間を募集中です。
株式会社システムトラスト

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ