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