[Oracle故障处理]记一次PX msg pool 4031错误的处理

时间:2022-07-23
本文章向大家介绍[Oracle故障处理]记一次PX msg pool 4031错误的处理,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

这个专题讲一些日常运维的异常处理

今天讲一个ORA-4031错误的处理过程

1. 现象

今天执行一个表分析的语句

SQL> exec dbms_stats.gather_table_stats(ownname => 'username',tabname => 'tablename',estimate_percent=>dbms_stats.auto_sample_size, method_opt => 'for all columns size AUTO', degree =>3, cascade => true)

遇到了如下错误

ORA-04031: unable to allocate 4328 bytes of shared memory ("shared pool","unknown object","sga heap(1,0)","PX msg pool")

2. 原因查找

看到4031我们第一时间想到的是shared pool不够用了

我们可以查看shared pool的使用率,发现还有300多M

接下来我们看括号里面的内容 他提示的是PX msg pool这个池

从字面上看应该是并行相关的区域

我们知道并行相关的东西是应该放在large pool里面的

怎么会从shared pool中分配呢

这是我们展开搜索功能,找到一个网站

上面说的是这个特性是从10g开始的(待验证)

而我们这个数据库是9i的

3. 问题解决

既然找到了一个方向,接下里我们验证下,我们将degree 设为1 ,这样就不使用并行了

SQL> exec dbms_stats.gather_table_stats(ownname => 'usernmae',tabname => 'tabelname',estimate_percent=>dbms_stats.auto_sample_size, method_opt => 'for all columns size AUTO', degree =>1, cascade => true)

这时分析成功

PS:发现没有并行速度还更快了~

4.参考链接

http://dbakevin.blogspot.com/2012/06/04031-and-large-pool-parallel-and-px.html

http://www.zhaibibei.cn/oralce/oracle-parameter/large_pool_size/