ORA-12853和ORA-04031 large pool 不足錯誤解決

darren__chan發表於2015-03-26
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;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29863023/viewspace-1474961/,如需轉載,請註明出處,否則將追究法律責任。

相關文章