ORA-12853 and ORA-04031 large pool insufficiency error resolved
ORA-12801: error signaled in parallel query server P139
ORA-12853: insufficient memory for PX buffers: current 274880 K, max needed 19722240 K
ORA-04031: unable to allocate 65560 bytes of shared memory ("large pool", "unknown object", "large pool", "PX msg pool ")
When we receive such an error today, we can see that the preceding error is caused by the shortage of large pools due to parallel queries.
First, let's take a look at large pool:
A large pool is an optional memory pool in SGA. A large pool provides a large memory segment with a maximum size of 4 GB. You can configure a large pool as needed:
1. Oracle XA interface used for session Memory Sharing Service (in the Shared Server MTS mode) and Oracle Distributed Transaction Processing
2. When Parallel Query Option PQO is used
3. I/O server process memory (buffer)
4. Oracle backup and recovery (when RMAN is enabled)
The large pool does not have an LRU list. This is different from the reserved space in the shared pool. The reserved space and other allocated memory in the Shared Pool use the same LRU list.
A large block of memory will never be swapped out of a large pool. The memory must be explicitly allocated and released by each session.
Solution: 1. Check whether parallelism is enabled.
Select * from dba_tables where degree <> 1;
Select * from dba_indexes where degree <> 1;
2. It is found that the parallel function is enabled for the table, so you can disable the parallel function:
Alter table xx. xxx noparallel;
3. If the large pool size is insufficient, you can adjust the size as needed:
Alter system set LARGE_POOL_SIZE = xxM scope = spfile;