ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
PGA (プログラムグローバル領域) とは
PGA (Program Global Area) は Oracle Database で各サーバープロセスが個別に保持する非共有メモリ領域です。クライアントからの接続ごとに割り当てられるサーバープロセスが、SQL の実行に必要な作業領域として使用します。
全プロセスで共有される SGA (System Global Area) と対比される概念で、ソートやハッシュ結合のようにセッション固有の中間データを保持する役割を担います。
SGA との違い
| 項目 | SGA | PGA |
|---|---|---|
| 共有性 | 全プロセスで共有 | プロセスごとに独立 |
| 主な用途 | バッファキャッシュ / 共有プール / REDO ログバッファ | ソート領域 / ハッシュ結合領域 / カーソル状態 |
| サイズ管理 | SGA_TARGET / SGA_MAX_SIZE | PGA_AGGREGATE_TARGET / PGA_AGGREGATE_LIMIT |
| 確保のタイミング | インスタンス起動時に確保 | セッション接続時 / SQL 実行時 |
PGA の構成要素
| 領域 | 役割 |
|---|---|
| SQL 作業領域 (Work Area) | ORDER BY のソート / ハッシュ結合 / GROUP BY のバッファ |
| セッションメモリ | セッション変数 / NLS 設定 / ログイン情報 |
| プライベート SQL 領域 | カーソル状態 / バインド変数 / 実行プラン情報 |
| スタック領域 | ローカル変数 / コールスタック |
このうちもっともサイズ変動が大きいのが SQL 作業領域です。巨大なソートやハッシュ結合が走ると一時的に膨らみ、終わると解放されます。
サイズの管理 (推奨設定)
11g 以降は自動 PGA 管理が標準で、合計目安値を 1 つ設定するだけで Oracle が各セッションに動的に割り振ってくれます。
-- PGA の合計目安値 (Oracle が自動で配分)
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G SCOPE=BOTH;
-- ハードリミット (12c 以降推奨)
ALTER SYSTEM SET PGA_AGGREGATE_LIMIT = 4G SCOPE=BOTH;
-- 確認
SHOW PARAMETER PGA;
| パラメータ | 意味 |
|---|---|
PGA_AGGREGATE_TARGET | PGA 合計の目安値。超えても直ちにエラーにはならない |
PGA_AGGREGATE_LIMIT | ハードリミット。超えるとセッションがキル対象になる (12c 以降) |
WORKAREA_SIZE_POLICY | AUTO で自動管理、MANUAL で個別パラメータ指定 |
監視に使うビュー
-- 全体の PGA 使用状況
SELECT name, value/1024/1024 AS mb
FROM v$pgastat
WHERE name IN ('total PGA inuse',
'total PGA allocated',
'maximum PGA allocated',
'over allocation count');
-- セッション別の PGA 使用量 TOP10
SELECT s.sid, s.username, p.pga_used_mem/1024/1024 AS used_mb
FROM v$session s
JOIN v$process p ON p.addr = s.paddr
ORDER BY p.pga_used_mem DESC
FETCH FIRST 10 ROWS ONLY;
| ビュー | 内容 |
|---|---|
V$PGASTAT | PGA 全体の統計 (使用量・最大・オーバーアロケーション回数) |
V$PROCESS | プロセスごとの PGA 使用量 (PGA_USED_MEM 等) |
V$SQL_WORKAREA | SQL 単位の作業領域使用情報 |
V$SQL_WORKAREA_ACTIVE | 現在アクティブな作業領域 |
不足したときの症状
- 大量データのソート / GROUP BY が一時表領域 (TEMP) にスピルし、ディスク I/O が増える
- ハッシュ結合がマルチパス化して結合時間が劇的に増加する
PGA_AGGREGATE_LIMIT超過時はセッションが ORA-04036 でキルされる- 監視ビュー
V$PGASTATのover allocation countが増えていく
SGA / PGA の全体像
Oracle Instance
├── SGA (共有メモリ)
│ ├── Buffer Cache
│ ├── Shared Pool (Library / Dictionary Cache)
│ ├── Redo Log Buffer
│ └── Large Pool / Java Pool / Streams Pool
└── PGA (プロセスごと)
├── SQL Work Area (Sort / Hash / GroupBy)
├── Session Memory
├── Private SQL Area
└── Stack
FAQ
Q: PGA を大きくすれば速くなる?
A: ソート / ハッシュ結合が多いワークロードでは劇的に速くなります。OLTP 中心なら効果は限定的。V$PGASTAT の cache hit % で判断してください。
Q: 自動メモリ管理 (AMM / ASMM) との関係は?
A: MEMORY_TARGET を使う AMM では SGA と PGA をまとめて 1 つの値で管理できます。ただし Linux では Hugepages 等の制約で SGA_TARGET + PGA_AGGREGATE_TARGET を個別管理する ASMM が主流です。
Q: ORA-04036 が出た時の対応
A: PGA_AGGREGATE_LIMIT を超過したセッションが強制終了されたサイン。アプリ側の大量データ処理を見直すか、リミットを増やします。
Q: 適切な PGA サイズの目安は?
A: OLAP 用途なら物理メモリの 20〜40%、OLTP 用途なら10〜20% が一般的な出発点。実測の maximum PGA allocated や over allocation count を見て調整します。
Q: 共有サーバー構成 (MTS) との違い
A: 共有サーバー構成では、本来 PGA に置かれるUGA (ユーザーグローバル領域) の一部がLarge Pool (SGA 内) に移動します。専用サーバー構成と挙動が変わる点に注意。
Q: PGA はバッファキャッシュとは別?
A: 別物です。バッファキャッシュ (SGA) はディスクブロックのキャッシュで全プロセス共有、PGA は計算の作業領域でプロセス専用。役割が異なります。
まとめ
PGA は Oracle のメモリ管理でSGA と並ぶ柱のひとつです。SGA が「共有」を担うのに対し、PGA は「プロセスごと」のセッションメモリを担当します。OLAP 系の大規模ソート / 結合では PGA の大きさが性能を直接左右するため、V$PGASTAT による監視と PGA_AGGREGATE_TARGET の適切な設定がチューニングの肝となります。
関連
- SGA — 共有メモリ領域 (Buffer Cache / Shared Pool)
- 一時表領域 (TEMP) — PGA からあふれたソートの行き先
- サーバープロセス — PGA を所有する Oracle のプロセス
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?