故障处理队列等待之enq IV - contention案例
Posted ^_^小麦苗^_^
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了故障处理队列等待之enq IV - contention案例相关的知识,希望对你有一定的参考价值。
【故障处理】队列等待之enq IV - contention案例
1.1 BLOG文档结构图
1.2 前言部分
1.2.1 导读和注意事项
各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~:
① 队列等待之enq IV - contention案例(重点)
Tips:
① 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaimiaolhr)上有同步更新。
② 文章中用到的所有代码、相关软件、相关资料及本文的pdf版本都请前往小麦苗的云盘下载,小麦苗的云盘地址见:http://blog.itpub.net/26736162/viewspace-1624453/。
③ 若网页文章代码格式有错乱,请下载pdf格式的文档来阅读。
④ 在本篇BLOG中,代码输出部分一般放在一行一列的表格中。
本文如有错误或不完善的地方请大家多多指正,ITPUB留言或QQ皆可,您的批评指正是我写作的最大动力。
1.3 故障分析及解决过程
1.3.1 数据库环境介绍
项目 |
source db |
db 类型 |
RAC |
db version |
12.1.0.2.0 |
db 存储 |
ASM |
OS版本及kernel版本 |
SuSE Linux Enterprise Server(SLES 11) 64位 |
1.3.2 AWR分析
这里简单分析一下Up Time(hrs),其它几个指标都很熟悉了。表中的“Up Time(hrs)”代表自数据库实例启动到本次快照结束这段时间的小时数。例如,该AWR中数据库实例1的启动时间为“2016-08-11 20:51”,快照结束时间为“2016-12-14 21:00”,故“Up Time(hrs)”约为125.006天,转换为小时约为3000.14小时,如下所示:
SYS@lhrdb> SELECT trunc(UP_TIME_D,3), trunc(trunc(UP_TIME_D,3)*24,2) UP_TIME_HRS FROM (SELECT (TO_DATE(\'2016-12-14 21:00\', \'YYYY-MM-DD HH24:MI\') - TO_DATE(\'2016-08-11 20:51\', \'YYYY-MM-DD HH24:MI\')) UP_TIME_D FROM DUAL);
TRUNC(UP_TIME_D,3) UP_TIME_HRS ------------------ ----------- 125.006 3000.14 |
可以看到节点1的负载较大,而ADDM中,特殊类的等待事件较多。接下来查看等待事件的部分:
可以看到enq: IV - contention和DFS lock handle等待较为严重。这里需要说一下enq: IV - contention这个名称。在AWR中,IV和-的前后都是1个空格,而在数据库中记录的是-之后有2个空格,如下:
所以,采用搜索的时候需要注意。
根据ASH中的p1参数的值获得:
SYS@lhrdb> SELECT CHR(BITAND(1230372867, -16777216) / 16777215) || 2 CHR(BITAND(1230372867, 16711680) / 65535) "LOCK", 3 BITAND(1230372867, 65535) "MODE" 4 FROM DUAL;
LO MODE -- ---------- IV 3
|
1.3.3 enq: IV - contention解决
SELECT *
FROM V$EVENT_NAME A
WHERE A.NAME LIKE \'%enq: IV - contention%\';
该等待事件为12c特有,12c相比11g多了大约500多个等待事件。该问题参考MOS:12c RAC DDL Performance Issue: High "enq: IV - contention" etc if CPU Count is Different (文档 ID 2028503.1)
The fix will be included in future PSU, patch exists for certain platform/version.
The workaround is to set the following parameter to the highest value in the cluster and restart:
_ges_server_processes
To find out the highest value, run the following grep on each node:
ps -ef| grep lmd
该等待事件主要是由于12c RAC的2个节点上的cpu_count这个变量不一致导致的。
从AWR中可以看出节点1的CPU为48,而节点2的CPU为96。
从dba_hist_parameter中可以看到CPU_COUNT这个参数的变化历史:
SQL> SHOW PARAMETER CPU
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ cpu_count integer 96 parallel_threads_per_cpu integer 2 resource_manager_cpu_allocation integer 96 enq: TX - row lock contention故障处理一则 关于12C RAC 上的top5 问题:enq: IV - contention 关于12C RAC 上的top5 问题:enq: IV - contention |