The Large Pool is an optional memory structure within the System Global Area (SGA), set aside for
operations that need large, contiguous chunks of memory. It is not present by default; a DBA has to
explicitly configure one. By isolating these large allocations from the Shared Pool, the Large Pool
reduces fragmentation and contention there, which is exactly the performance problem it exists to
solve. Without a Large Pool configured, Oracle falls back to allocating this same memory from the
Shared Pool instead, competing directly with cached SQL and PL/SQL for the same space.
Key Uses of the Large Pool
The Large Pool is primarily used for:
RMAN Backup and Restore: Oracle Recovery Manager allocates memory for its I/O
buffers here rather than in the Shared Pool, improving backup and restore performance.
Parallel Query Execution: message buffers that let parallel query processes
communicate with each other are allocated from the Large Pool.
Shared Server: in a Shared Server configuration (formerly called MTS,
Multi-Threaded Server, in much older Oracle documentation), session memory (the UGA, User Global
Area) for shared server connections is stored here instead of in the Shared Pool.
Oracle XA: the interface used when a transaction spans multiple databases also
draws its session memory from the Large Pool, alongside Shared Server UGA.
I/O Server Processes: memory for asynchronous I/O server process operations.
Advanced Queuing (AQ): message buffers for Advanced Queuing can be allocated
from the Large Pool as well.
By keeping these allocations out of the Shared Pool entirely, the database avoids the specific
performance overhead of the Shared SQL cache shrinking to make room for large, unrelated allocations.
Fast Ingest and MEMOPTIMIZE FOR WRITE
Oracle AI Database 26ai adds a new Large Pool use case worth knowing about specifically:
MEMOPTIMIZE_WRITE_AREA_SIZE sizes an ingest buffer, inside the Large Pool, where
Memoptimized Rowstore fast-ingest inserts are buffered before being written out. This is aimed at
high-volume, single-row insert workloads, the kind IoT-style applications generate, where paying the
full transactional overhead for every individual row would be wasteful.
ALTER SYSTEM SET MEMOPTIMIZE_WRITE_AREA_SIZE = 64M SID='*';
Worth keeping straight: this is the WRITE side of Memoptimized Rowstore only, and it genuinely does
live in the Large Pool. The READ side, fast primary-key lookups against MEMOPTIMIZE FOR READ tables,
is governed by a separate parameter, MEMOPTIMIZE_POOL_SIZE, which creates its own
dedicated memoptimize pool elsewhere in the SGA. That read-side pool is not part of the Large Pool,
so don't reach for LARGE_POOL_SIZE or the Large Pool views below to troubleshoot it.
Advantages of Using the Large Pool
Reduces Shared Pool Contention: offloading large operations to the Large Pool
means the Shared Pool is far less likely to become fragmented or overloaded by them.
Improves Performance: RMAN backups, parallel queries, and now fast-ingest
inserts all run more efficiently when their memory comes from a pool sized specifically for them.
Simplifies Memory Management: separating these allocations from general-purpose
SQL and PL/SQL caching makes the whole instance's memory usage easier to reason about and tune.
Configuring the Large Pool
The Large Pool is sized with the LARGE_POOL_SIZE initialization parameter, settable in
the parameter file (SPFILE or PFILE) or dynamically at runtime:
ALTER SYSTEM SET LARGE_POOL_SIZE = 256M;
How large to make it depends entirely on your workload. If you rely heavily on RMAN, size it to
comfortably fit your I/O buffers. If you're running Shared Server or parallel queries at scale, size
it based on session count and query complexity. If you've enabled fast ingest, factor in
MEMOPTIMIZE_WRITE_AREA_SIZE as its own separate allocation within the same pool.
Monitoring the Large Pool
Three views cover Large Pool visibility from different angles:
V$SGASTAT: detailed, per-component memory allocations across the SGA, including the
Large Pool.
V$SGA: summary-level information about SGA components.
V$SGAINFO: size information for SGA components, useful for quick sanity checks.
To check Large Pool usage specifically:
SELECT * FROM V$SGASTAT WHERE POOL = 'large pool';
When to Use the Large Pool
Consider configuring a Large Pool if any of the following apply:
You use RMAN for backups and restores.
You run parallel queries frequently.
You use Shared Server connections.
You've enabled fast ingest for high-volume single-row inserts.
You're seeing Shared Pool contention or fragmentation that these operations could be causing.
In short: the Large Pool is optional but genuinely beneficial. It exists specifically to keep large,
bursty memory allocations out of the way of the Shared Pool's much more sensitive job of caching SQL
and PL/SQL for reuse.
Figure 5-8: The Large Pool within the SGA, showing its allocation map (UGA for shared
server and Oracle XA, RMAN and I/O worker buffers, parallel execution message pool, and deferred
insert buffers for MEMOPTIMIZE FOR WRITE) alongside the shared server queue flow: dispatchers place
client requests on a single common request queue, an available shared server process picks one up,
and the response is routed back through a per-dispatcher response queue.
One structural difference worth knowing: the Large Pool does not use an LRU list the way reserved
space in the Shared Pool does. Memory here is allocated and held until the operation using it is
finished, then released back to the pool for the next process to use, rather than being aged out
under memory pressure the way Shared Pool memory can be.
Java Pool:
The Java pool is a related but separate area of memory, storing session-specific Java code and data
for the JVM running inside the database. For dedicated server connections, it holds the shared part
of each Java class, including methods and read-only memory such as code vectors, but not each
session's own per-session Java state. Under Shared Server, it also holds some UGA for each session's
state, and that UGA has to fit within the Java pool's allocated space as it grows and shrinks. The
Java Pool Advisor tracks library cache memory used for Java and can predict how resizing the Java
pool would affect the parse rate; it's automatically enabled whenever
STATISTICS_LEVEL is set to TYPICAL or higher, and its statistics reset if the advisor is
later turned off.
Shared large Pools - Quiz
Click the Quiz link below to test your knowledge of the shared pool and the large pool. Shared Large Pools - Quiz