【性能优化】PX_MISMATCH导致Oracle实例挂起

某套核心RAC库出现一个节点HANG的现象,分析AWR发现大量resmgr:cpu quantum等待事件,且parse time消耗了大量的DB TIME:

 

resmgr cpu quantum event

 

 

parse time elapsed

 

 

检查解析语句发现存在大量游标无法共享的问题,通过v$SQL_SHARED_CURSOR定位无法共享的原因,发现为PX_MISMATCH。

 

“PX_MISMATCH”意味着游标无法共享的原因是不同的并行执行力或不同的执行计划,通过内部资料找到Bug 9375300 – Cursors not shared due to reason ‘PQ_SLAVE_MISMATCH’ or ‘PX_MISMATCH’ on RAC [ID 9375300.8]。

 

对于该类 ’PQ_SLAVE_MISMATCH’ or ‘PX_MISMATCH’引起的游标无法共享,一般建议设置parallel_degree_policy=MANUAL来避免一些可能的BUG.

另外使用11g新特性parallel_force_local=true也可能导致该PX_MISMATCH的问题。

相关的一些BUG还有:

 

PX Bug 11808966 – SQL ON GV$ TABLES GENERATES MULTIPLE VERSIONS WITH REASON PX_MISMATCH
PX Bug 10235518 – HIGH VERSION COUNT FOR GV$INSTANCE DUE TO PX_MISMATCH IN RAC
PX Bug 10297948 – FREQUENT PX MISMATCHES OCCURRING FOR PARTICULAR SQL
PX Bug 11818088 – HIGH VERSION COUNT ON PX_MISMATCH AND WAIT ON CURSOR:  MUTEXS

11.2.0.1.BP08,
All active instances used in calculation of dop when
9671271 11.2.0.2.BP03, 11.2.0.3, parallel_force_local=true / High version count on
12.1.0.0
PX_MISMATCH