暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

并行导致ORA-04031 PX msg pool

章芋文 2019-06-19
778

问题描述

有时候过度使用并行,或者HINT写错走了默认并行,往往会撑爆shared pool中的PX池,出现ORA-04031错误。 
如:/*+ parallel(t,1000)*/ /*+ parallel(8,4)*/等错误写法,还有这种/*+ parallel(t,100)*/过度使用并行的。 
另外,默认并行度=RAC 节点数*逻辑CPU个数*parallel_threads_per_cpu 参数值,如crmdb1=2*96*2=384 
alert中报错信息如下: 

Errors in file /oracle/app/diag/rdbms/trace/_p134_24052004.trc  (incident=2320134): 
ORA-04031: 无法分配 204824 字节的共享内存 ("large pool","unknown object","large pool","PX msg pool") 
Errors in file /oracle/app/diag/rdbms/trace/_p132_15663450.trc  (incident=2320118):


专家解答

在trace中就可以定位到session的相关信息,和执行的SQL语句: 

service name:  
client details: 
O/S info: user: 147, term: , ospid: 24052004 
machine: WORKGROUP\ program: oracle@ (P134) 
application name: PL/SQL Developer, hash value=1190136663 
action name: SQL 窗口 - select count(1) from ; , hash value=2801130726 


Sampled Session History Summary: 
  longest_non_idle_wait: 'latch: parallel query alloc buffer' 
  [4 samples, 00:18:54 - 00:18:57] 
      time_waited: >= 3 sec (still in wait) 


ObjectName:  Name=select /*+ parallel(8,4)*/count(1),process_status,process_id from

建议如果使用并行尽量不要超过10,特别是业务时间会给数据库带来较大压力,另外避免出现/*+ parallel(8,4)*/这种错误写法,正确如下: 
/*+ parallel(t,8)*/  table_name t 
另外还可以修改parallel_max_servers参数限制并行的最大值。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论