4.

Oracle Large Pool (ラージプール) 完全ガイド

編集
この記事の要点
  • Large Pool は SGA の一構成要素。大きな連続メモリが必要な処理用
  • 主な用途: RMAN バックアップ / リカバリ並列クエリ共有サーバー (MTS)
  • Shared Pool との違い: Large Pool はLRU を持たず断片化しにくい
  • LARGE_POOL_SIZE パラメータで明示指定、AMM / ASMM では自動調整
  • v$sga_dynamic_components / v$sgastat で現在のサイズと使用量を確認

SGA における Large Pool の位置づけ

Oracle の SGA (System Global Area) は複数のメモリ領域から構成されます:

領域役割
Database Buffer Cache表 / 索引のブロックをキャッシュ
Shared PoolSQL の構文解析結果・実行計画・データ・ディクショナリキャッシュ
Redo Log BufferREDO レコードのバッファ。LGWR が REDO ファイルへ書く
Large Pool大きい連続メモリが必要な処理用(任意)
Java PoolJava VM 用
Streams PoolStreams / GoldenGate 用バッファ

Large Pool の主な用途

用途説明関連パラメータ
RMAN バックアップ / リカバリ並列バックアップのスレーブ用バッファ、ディスク I/O バッファBACKUP_TAPE_IO_SLAVES
並列クエリ実行並列スレーブ間のメッセージバッファPARALLEL_*
共有サーバー (MTS)UGA(ユーザーグローバル領域)の格納DISPATCHERS
Data Pump (expdp/impdp)パイプ・キューバッファ
I/O Slave 処理非同期 I/O 不可な環境でのスレーブ I/ODBWR_IO_SLAVES

Shared Pool との違い

項目Shared PoolLarge Pool
確保単位小〜中(4KB〜数十KB)大(数百KB〜数MB)
LRU 管理あり(古いものから破棄)なし
断片化起きやすい (ORA-4031 の原因)起きにくい
主な内容SQL 解析結果・実行計画UGA / RMAN バッファ等
必須か必須用途により任意

RMAN や並列クエリの大きなメモリ要求を Shared Pool から取ろうとすると、Shared Pool が断片化して ORA-4031(共有プールに空きがない)が出ることがあります。これを避けるため Large Pool を専用に確保します。

Large Pool のサイズ設定

-- 現在のサイズ確認
SHOW PARAMETER large_pool_size;

-- 個別サイズで明示指定(手動メモリ管理)
ALTER SYSTEM SET large_pool_size = 256M SCOPE = BOTH;

-- AMM(Automatic Memory Management)有効時は自動調整
SHOW PARAMETER memory_target;       -- 0 でない = AMM 有効
SHOW PARAMETER memory_max_target;

-- ASMM(Automatic Shared Memory Management)
SHOW PARAMETER sga_target;          -- 0 でない = ASMM 有効
SHOW PARAMETER sga_max_size;

-- ASMM 配下でも下限を保証したい場合
ALTER SYSTEM SET large_pool_size = 128M SCOPE = BOTH;  -- 最低 128M を確保

-- 11g 以降は手動指定しなくても、ASMM/AMM が必要時にサイズを動的に増減

現在の状態を確認するビュー

-- SGA 全体の構成
SELECT name, value/1024/1024 AS mb
FROM v$sga;
-- NAME             MB
-- Fixed Size       8
-- Variable Size    1024
-- Database Buffers 2048
-- Redo Buffers     16

-- 動的コンポーネント別のサイズ
SELECT component, current_size/1024/1024 AS current_mb,
       min_size/1024/1024 AS min_mb,
       max_size/1024/1024 AS max_mb
FROM v$sga_dynamic_components
WHERE component LIKE '%pool%';

-- Large Pool 内部の利用状況
SELECT pool, name, bytes/1024/1024 AS mb
FROM v$sgastat
WHERE pool = 'large pool';
-- POOL          NAME              MB
-- large pool    free memory       120
-- large pool    PX msg pool       2
-- large pool    KGH: NO ACCESS    8

RMAN で Large Pool が使われる例

-- I/O スレーブを使う設定(テープ装置等で有効)
ALTER SYSTEM SET BACKUP_TAPE_IO_SLAVES = TRUE SCOPE = SPFILE;
ALTER SYSTEM SET LARGE_POOL_SIZE = 256M SCOPE = SPFILE;

-- 並列度を設定して RMAN バックアップ
-- RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
-- RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

-- バックアップ実行中の Large Pool 利用確認
SELECT pool, name, bytes/1024 AS kb
FROM v$sgastat
WHERE pool = 'large pool' AND name LIKE '%KSFQ%';
-- KSFQ = RMAN Sequential I/O Buffer

並列クエリで Large Pool が使われる例

-- 並列度を設定
ALTER SYSTEM SET PARALLEL_MAX_SERVERS = 32;
ALTER SYSTEM SET PARALLEL_MIN_SERVERS = 4;

-- 並列実行のヒント付きクエリ
SELECT /*+ PARALLEL(emp, 8) */ COUNT(*) FROM emp_billion;

-- 並列スレーブのメッセージバッファ確認
SELECT pool, name, bytes/1024 AS kb
FROM v$sgastat
WHERE pool = 'large pool' AND name LIKE '%PX%';
-- PX msg pool : Parallel eXecution メッセージ用

ORA-4031 と Large Pool の関係

OLTP + バッチ並行運用の本番でORA-04031: unable to allocate ... bytes of shared memoryが出る場合、Shared Pool 内で巨大連続領域を要求して断片化が原因のことが多いです:

-- 1. Large Pool を明示確保して逃がす
ALTER SYSTEM SET LARGE_POOL_SIZE = 256M;

-- 2. UGA を Large Pool に逃がす(共有サーバー時)
-- 自動的に Large Pool へ確保される

-- 3. Shared Pool の断片化解消(緊急対応)
ALTER SYSTEM FLUSH SHARED_POOL;
-- ★ 本番では SQL 計画キャッシュも消えるので注意。再ハードパースで CPU 跳ね上がる

サイズ見積もりの目安

用途推奨サイズ
小規模・RMAN のみ64M〜128M
並列クエリ多用256M〜512M
共有サーバー + UGA 大同時セッション × UGA 平均サイズ × 1.5
大規模 OLAP / DWH1G 以上、SGA_TARGET の 10〜20%

AMM / ASMM 有効時はサイズを直接指定する必要はほぼありません。AWR レポートで Large Pool が圧迫されているなら下限を LARGE_POOL_SIZE で明示する程度です。

FAQ

Q: Large Pool を 0 にしたらどうなる?
A: 用途は Shared Pool で代用されますが、断片化リスクが上がります。並列クエリ・RMAN・MTS のいずれかを使うなら 64M 以上は確保しましょう。

Q: AMM と ASMM どちらが良い?
A: 11g 以降は AMM (memory_target) が手軽ですが、大規模本番では ASMM (sga_target + pga_aggregate_target) の方が予測性が高く推奨されます。

Q: AWR で Large Pool の使用率を見たい
A: AWR レポートの「Memory Statistics」セクションに current_size / target_size が出ます。v$sga_resize_ops でリサイズ履歴も確認可能です。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. データベースバッファキャッシュ
  2. 共有プール
  3. REDOログバッファ
  4. ラージプール

最近更新/作成されたページ