问题描述
有时候过度使用并行,或者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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。