ORA-12853和ORA-04031 large pool 不足錯誤解決
ORA-12801: error signaled in parallel query server P139
ORA-12853: insufficient memory for PX buffers: current 274880K, max needed 19722240K
ORA-04031: unable to allocate 65560 bytes of shared memory ("large pool","unknown object","large pool","PX msg pool")
今天接到這麼一個錯誤,可以看出以上是因為並行查詢導致了大池不足造成。
可先瞭解下 large pool:
大池是SGA中的一塊可選記憶體池,大池主要提供了大記憶體段,大池最大大小為4G。根據需要時配置,主要用到大池的情況:
1. 用於共用服務(Shared Server MTS方式中)的會話記憶體和Oracle分散式交易處理的Oracle XA介面
2. 使用並行查詢(Parallel Query Option PQO)時
3. I/O伺服器處理序用的記憶體(緩衝)
4. Oracle備份和恢複操作(啟用了RMAN時)
大池沒有LRU列表。這和共用池中的保留空間不同,保留空間和共用池中其他分配的記憶體使用量同樣的LRU列表。
大塊記憶體從不會換出大池中,記憶體必須是顯式的被每個會話分配並釋放。
解決過程:1.檢查是否開啟了並行.
select * from dba_tables where degree<>1;
select * from dba_indexes where degree<>1;
2.發現是表開啟了並行,因此可關閉並行:
ALTER TABLE XX.XXX NOPARALLEL;
3.如果large pool大小不足,可根據實際需求調整大小:
ALTER SYSTEM SET LARGE_POOL_SIZE=xxM scope=spfile;