> 历史信息查看请查看个人网页www.zhaibibei.cn

> 这是一个坚持Oracle,Python原创内容的公众号,欢迎关注

------


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

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




-------

[toc]

##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)
```

这时分析成功


[image:207 size:orig]


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



------

##4.参考链接

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



[http://www.zhaibibei.cn/oralce/oracle-parameter/large_pool_size/](http://www.zhaibibei.cn/oralce/oracle-parameter/large_pool_size/)

--------