> 历史信息查看请查看个人网页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/)
--------