案例:troubleshooting Large Waits With The Wait Event “resmgr:cpu quantum”

本案例来自西区某客户,数据库版本为11.2.0.4,客户反馈应用异常缓慢,几乎处于不可用的状态。

查看历史活动会话信息发现,从2022-05-01 09:43开始,活动会话开始异常增长。

大量异常的活动会话几乎全是等待resmgr:cpu quantum

resmgr:cpu quantum等待事件的含义在WAITEVENT: “resmgr:cpu quantum” Reference Note (Doc ID 2097889.1) 中有说明

简单来说就是,当resource manager启用对CPU的限制时,进程对应消费组所占用的CPU达到限额时,该进程将以等待resmgr: cpu quantum的形式进入等待,以保证该消费组的cpu消耗不超过限额。

从osw的vmstat可以看到刚刚出现大量resmgr: cpu quantum的时段cpu使用率仅仅为50%。

查看参数resource_manager_plan,发现启用了DEFAULT_MAINTENANCE_PLAN

看到DEFAULT_MAINTENANCE_PLAN应该非常熟悉,这就是11g自动任务维护时间窗口默认将会启用的resource mangager plan。

今天51劳动节,正好是周日,该库时间窗口启用时间为早上6点,从alert也可以看到6点时启用了该时间窗口的resource manager plan

DEFAULT_MAINTENANCE_PLAN对应消费组以及限制在dba_rsrc_plan_directives中查看

自动任务维护属于ORA$AUTOTASK_SUB_PLAN,SYS_GROUP和OTHER_GROUPS分别代表SYS/SYSTEM会话消费组和业务会话消费组。CPU限额按照MGMT_P*定义的优先级进行百分比分配,该限额是会动态调整的。假如此时几乎只有ORA$AUTOTASK_SUB_PLAN在运行,ORA$AUTOTASK_SUB_PLAN的限额可能会被调高,最大限制是MAX_UTILIZATION_LIMIT默认90%,而对应真正运行业务的OTHER_GROUPS就会降低限额。

在周日的早上6点开启的自动任务维护窗口,很可能几乎只有自动维护任务的相关session会被执行,所以有可能会提高ORA$AUTOTASK_SUB_PLAN,并且降低OTHER_GROUPS的限额。如果假设9点开始业务开始增加,那么就很容易导致resmgr: cpu quantum。

此外发现当时等待resmgr: cpu quantum的sql基本是同一个sql。

怀疑有sql的并发的比之前的要高的因素存在

通过对比可以看到故障期间的sql并发确实比之前要多1倍,并且对于执行次数如此之高的sql,sql性能并不算太好,因为对于一个非聚合的sql来说,平均返回行数非常少的情况下,消耗了几千甚至10000多的逻辑读,这是不合理的。假如该sql足够优化,可能也不会导致此次故障。

我们知道对于resource manager的cpu限制,是根据cpu_count参数来进行百分比配额的,而该库的cpu_count为136,实际的lcpu数量为160,并且该主机只有1个实例,这也是为何主机的cpu使用率并没有100%使用完,始终在85-90%之间的原因。虽然cpu_count与lcpu差距不大但是也或多或少算是此次故障的另一个因素。

最终建议:

  1. 假如周末白天也有业务的系统,建议调整自动维护任务时间窗口的时间,比如都放在晚上22点进行。
  2. 禁用自动维护窗口默认启用的resource manager plan
  3. 优化该执行次数如此高但并不够优化的sql
  4. 建议在确认主机只有一个实例存在的情况下,cpu_count与实际的lcpu保持一致。该参数参与了大量资源与后台进程个数的运算。如LMS、LMD、ADG pr进程等等。

 

 

此条目发表在Oracle, Oracle troubleshooting分类目录,贴了, 标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注