标题: ORA-04031 large pool PX msg pool 不足错误解决 [打印本页] 作者: 郑全 时间: 2016-10-12 10:46 标题: ORA-04031 large pool PX msg pool 不足错误解决 ORA-04031 large pool PX msg pool 不足错误解决
今天接到用户反映,执行一个查询select * from xxx,就会挂起,后端报警文件在报大池无法分配的问题,具体如下:
Tue Oct 11 15:26:06 2016
Errors in file c:\app\administrator\diag\rdbms\cdal\cdal\trace\cdal_p040_4128.trc (incident=113581):
ORA-04031: 无法分配 268512 字节的共享内存 ("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;