并行导致ORA-04031 PX msg pool

章芋文 2019-06-19
10
0 0
摘要:建议如果使用并行尽量不要超过10,特别是业务时间会给数据库带来较大压力,另外避免出现/*+ parallel(8,4)*/这种错误写法

问题描述

有时候过度使用并行,或者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参数限制并行的最大值。

「喜欢文章,快来给作者赞赏墨值吧」

评论

0
0
Oracle
订阅
欢迎订阅Oracle频道,订阅之后可以获取最新资讯和更新通知。
墨值排行
今日本周综合
热门文章
近期活动
全部
相关课程
全部