广告
返回顶部
首页 > 资讯 > 数据库 >一个RESOURCE MANAGER引起的问题分析
  • 220
分享到

一个RESOURCE MANAGER引起的问题分析

2024-04-02 19:04:59 220人浏览 独家记忆
摘要

1.分析hanganalyze日志: Chains most likely to have caused   the hang: 《《《最 终 阻塞源都



1.分析hanganalyze日志

Chains most likely to have caused   the hang: 《《《最 终 阻塞源都是由于 resmgr:cpu quantum 引起。

 [a] Chain 1 Signature: ' resmgr:cpu quantum '<='buffer busy   waits'<='buffer busy waits'<='enq: TX - index contention'

     Chain 1 Signature Hash: 0xe7466825

 [b] Chain 2 Signature: ' resmgr:cpu quantum '<='buffer busy waits'

     Chain 2 Signature Hash: 0x23972dee

 [c] Chain 3 Signature: ' resmgr:cpu quantum '<='buffer busy waits'

     Chain 3 Signature Hash: 0x23972dee

====================================================================

Chain   1:

-------------------------------------------------------------------------------

    oracle session identified by:

    {

                instance: 1 (jfdb.jfdb1)

                   os id: 78941

              process id: 1240, oracle@XXX-JF-DB03

              session   id: 22 <<<< session 22

        session serial #: 32445

    }

    is waiting for 'enq: TX - index   contention' with wait info:

    {

                      p1:   'name|mode'=0x54580004

                      p2: 'usn<<16 |   slot'=0x1cb0015

                      p3: 'sequence'=0xf3fa7

            time in wait: 0.122389 sec

           timeout after: never

                 wait id: 199367

                blocking: 0 sessions

            wait history:

              * time between current wait and   wait #1: 0.000318 sec

             ………

    }

and is blocked by <<<< 被阻塞

 => Oracle session identified by:

{

                instance: 1 (jfdb.jfdb1)

                   os id: 1349

process   id: 2756, oracle@XXX-JF-DB03

session id: 3320 <<<<session 3320

        session serial #: 3849

}

which   is waiting for ‘buffer busy waits’ with wait info:

{

p1:   ‘file#’=0x8c

p2:   ‘block#’=0x286540

p3:   ‘class#’=0x1

time   in wait: 0.218850 sec

           timeout after: never

                 wait id: 51286

                blocking: 58 sessions

wait   history:

 ……….

}

     and is blocked by <<<< 被阻塞

 => Oracle session identified by:

    {

                instance: 1 (jfdb.jfdb1)

                   os id: 3182

              process id: 2975, oracle@XXX-JF-DB03

              session   id: 5658 <<<session 5658

        session serial #: 181

    }

    which is waiting for 'buffer busy waits'   with wait info:

    {

                      p1: 'file#'=0x8c

                      p2: 'block#'=0x285b1f

                      p3: 'class#'=0x1

            time in wait: 0.219271 sec

           timeout after: never

                 wait id: 38737

                blocking: 63 sessions

            wait history:

              。。。。。。

    }

    and is blocked by<<<< 被阻塞

 => Oracle session identified by:

    {

                instance: 1 (jfdb.jfdb1)

                   os id: 27602

              process id: 2384, oracle@XXX-JF-DB03

              session id: 334   《《《session 334

        session serial #: 757

    }

    which is waiting for 'resmgr:cpu quantum'   with wait info:

    {

                      p1: 'location'=0x2

                      p2: 'consumer group   id'=0x3259

                      p3: ' '=0x0

            time in wait: 0.040860 sec

           timeout after: never

                 wait id: 95941

                blocking: 114 sessions

            wait history:

            。。。。。。。

    }

 

Chain   1 Signature: 'resmgr:cpu quantum'<='buffer busy waits'<='buffer busy   waits'<='enq: TX - index contention'

Chain   1 Signature Hash: 0xe7466825

 

对 以上 hanganalyze 会 话进 行整理:

session : 334

同 时 阻塞114个会 话

阻塞了》

session : 5658

同 时 阻塞63个会 话

阻塞了》

session : 3320

同 时 阻塞 58 个会 话

阻塞了》

session id: 22

resmgr:cpu quantum

buffer busy waits

buffer busy waits

enq: TX - index contention

 

从以上 hanganalyze 日志可以看出, enq: TX - index contention 和 buffer busy waits 的等待堆积最终的源头是由于 resmgr:cpu quantum 等待引起,并且这些等待同时又阻塞了多个其他会话。

2.关于resmgr:cpu quantum等待事件解释:

以下从文档 ID 2097889.1 可以获得该等待事件的说明:

《 WAITEVENT: "resmgr:cpu quantum" Reference   Note ( 文档 ID 2097889.1) 》

·   Event   'resmgr: cpu quantum' is a standard event used by resource manager to control the allocation of   CPU to processes .   When a session waits for 'resmgr: cpu quantum' that session is waiting to be   allocated a quantum of CPU time.

等待事件 'resmgr : cpu quantum' 是 资源管理器用来控制 CPU 分配给进程 的标准事件。   当会话等待 'resmgr : cpu quantum' 时, 会话正在等待分配一个 CPU 时间额度 。

This wait occurs when the resource   manager is enabled and is throttling CPU consumption. To reduce the   occurrence of this wait event, increase the CPU allocation for the session's   current consumer   group .

当启用资源管理器并限制 CPU 消耗时会发生此等待。 为了减少此等待事件的发生,请增加会话当前消费组的 CPU 分配 。

一个RESOURCE MANAGER引起的问题分析

      该等待事件存在的意义是当resource manager控制CPU调度时,需要控制对应进程暂时不使用CPU而进程到内部运行队列中,以保证该进程对应的consumer group(消费组)没有消耗比指定resource manager指令更多的CPU。此时session就会以” resmgr:cpu quantum ”的名义等待在内部运行队列中,wait一段时间以减少对CPU的争用,直到再次获得CPU时该等待事件结束。

3.分析为何会出现资源管理:

《 11g: Scheduler Maintenance Tasks or Autotasks ( 文档 ID 756734.1) 》

一个RESOURCE MANAGER引起的问题分析

 

      根据以上说明,可以发现在 Oracle 11g 中,在默认情况下会启用自动化维护任务,数据库会在工作日的每晚 22:00 到第二天的凌晨 2:00 ,周末的凌晨 6:00 到第二天的凌晨 2:00, 自动开启自动化维护窗口对数据库进行诸如优化器的统计信息收集、自动 sql 的优化。在此期间数据库中便由 resource manager 来控制 CPU 的调度,启用资源管理计划主要是为了保障维护窗口内的任务有充分的资源进行使用。

      从告警日志中可以看出, 4 月 1 日 6:00 启动自动化维护窗口的信息:

Current log# 6 seq# 23750 mem# 0: +DG_DATA/jfdb/onlinelog/group_6.279.909112437

Sun Apr 01 05:51:29 2018

ArcHived Log entry 46019 added for thread   1 sequence 23749 ID 0x4d5ab97e dest 1:

Sun Apr 01 06:00:00 2018 《《《《 6 点整开启自动化维护窗口

Setting Resource Manager plan   SCHEDULER[0x32DF]:DEFAULT_MAINTENANCE_PLAN via scheduler window

Setting Resource Manager plan   DEFAULT_MAINTENANCE_PLAN via parameter

Sun Apr 01 06:00:00 2018

Starting background process   VKRM 《《《启动相应的进程

Sun Apr 01 06:00:00 2018

VKRM started with pid=361, OS id=48797

     

那么资源管理计划是如何限制资源的呢? 需要了解 RESOURCE MANAGER 的机制。

 

4.关于RESOURCE MANAGER的机制:

    Oracle 开启自动维护任务是使用的资源管理计划是 DEFAULT_MAINTENANCE_PLAN , 这 个 资 源管理 计 划控制CPU方法是使用是默 认 EMPHASIS 法, 这 种方法是多 级计 划,它以百分比形式指定CPU 如何在使用者 组 之 间 分布。CPU 占用率的分配 级别为 从1 到8, 级别 1  的 优 先 级 最高,将CPU  资 源在 给 定 级别 按指定的百分比分配,把 给 定 级别 上没有使用的使用者 资 源可供下一 级别 的使用者 组 使用。在当前数据 库 中DEFAULT_MAINTENANCE_PLAN的 资 源管理 计 划只用到了2个 级别 。

    在oracle 11g中, 实际 上CPU_P*的参数已 经 是失效了,而 应该 是MGMT_P*的参数,所以我 们 之前参考的是旧的参数,但 实际 是同 样 效果。


一个RESOURCE MANAGER引起的问题分析

一个RESOURCE MANAGER引起的问题分析

以下当前资源管理计划所使用 MGMT_P* 情况:

一个RESOURCE MANAGER引起的问题分析

    在 这 个 资 源管理 计 划DEFAULT_MAINTENANCE_PLAN中,主要存在四个CPU使用 组 : 1. ORA$AUTOTASK_SUB_PLAN 和 ORA$DIAGNOSTICS 实际 是用于自 动维护 任 务的。

2. SYS_GROUP 是 SYS 和 SYSTEM 用 户 的初始使用者 组,组中的会话都是 sys 或 system 账号创建的会话。

3. OTHER_GROUPS 用于在活 动资 源 计 划之外的所有使用者 组拥 有的会 话,即使其他业务用户及个人用户的会话。

    资 源管理 计 划中MGMT_P* 设 置的百分比 值 并不是一个固定限制的 值 是一个在 资 源 紧张时 的限制 值 ,但在 资 源空 闲时 有可能超出 这 个 值 。

    例如,在DEFAULT_MAINTENANCE_PLAN中ORA$AUTOTASK_SUB_PLAN分配了25%,但此 时 如果数据 库 比 较 空 闲 ,SYS_GROUP和OTHER_GROUPS等其他 组 没有什么 资 源占用,ORA$AUTOTASK_SUB_PLAN 则 可能增 长 到50%,但如果此 时资 源比 较紧张 OTHER_GROUPS 且已 经 占用50%以上,ORA$AUTOTASK_SUB_PLAN 则 需下降到25%。

    因此,在 这 个 资 源管理 计 划中,ORA$AUTOTASK_SUB_PLAN和ORA$DIAGNOSTICS 设 了MAX_UTILIZATION_LIMIT最大使用限制 为 90 。 这样 即使cpu是空 闲 的, 该组 或 计 划也不能分配90%以上的cpu 资 源。

对 于 资 源 计 划而言, 为 某个消耗 组 或者子 计 划分配的份 额 若没有使用,就可以被其他的消耗 组 或子 计 划使用。

 

再次分析 这 个 资 源管理 计 划DEFAULT_MAINTENANCE_PLAN,SYS_GROUP 优 先 级 最高在 级别 1 ,分配75%,在当 时 的情况,sys或system 账 号 创 建的会 话 占用的CPU 资 源并不一定达到了75%,其剩余的 资 源 则 分配 给级别 2 。在 级别 2 中ORA$AUTOTASK_SUB_PLAN和ORA$DIAGNOSTICS的自 动维护 任 务 在 资 源 紧张 的情况下用了30%,而其余70% 则 分配 给 了OTHER_GROUPS的 业务 会 话 。

资 源管理 计 划中MGMT_P* 设 置的百分比 值 可以理解 为 依据CPU个数的百分比来 计 算, 这 CPU 个数 则 来自CPU_COUNT参数 设 置的 值 。


一个RESOURCE MANAGER引起的问题分析
5.发现CPU_COUNT参数异常:

    在排查的过程中,发现当前数据库的CPU_COUNT仅设置为8,而实际上这台主机有32个CPU 核数,64个逻辑CPU。

CPU_COUNT:

一个RESOURCE MANAGER引起的问题分析

实际CPU Cores及逻辑cpu个数:

一个RESOURCE MANAGER引起的问题分析

在oracle 官方文档中已说明CPU_COUNT是依据CPU cores 的数量来指定的,并且也说明很多组件包括Resource Manager都是依靠这个cpu个数的。 一个RESOURCE MANAGER引起的问题分析

一个RESOURCE MANAGER引起的问题分析

这说明了,在资源管理计划开启时,受CPU_COUNT 为8的限制,数据库只能使用到了主机 32个CPU 核数中的8个,即为1/4。

分析故障期间主机的CPU 使用情况,发现在资源管理计划开启后,CPU使用率逐渐升高,但始终不超过25%,直到9:30后手工禁用了资源管理计划,CPU资源被放开,CPU使用率则立即上升到45%左右。



     因此,可以看出,资 源管理 计 划 打开期间,由于CPU_COUNT的设置过小,导致了数据库只能最多使用到了主机25%的CPU资源,并且受以上资源管理计划控制CPU机制的影响,业务会话可能只能用到这25% CPU资源中的70%,这就是导致数据库在4月1日高峰期时数据库达到了CPU了资源瓶颈的原因。

 



您可能感兴趣的文档:

--结束END--

本文标题: 一个RESOURCE MANAGER引起的问题分析

本文链接: https://www.lsjlt.com/news/48870.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 一个RESOURCE MANAGER引起的问题分析
    1.分析hanganalyze日志: Chains most likely to have caused   the hang: 《《《最 终 阻塞源都...
    99+
    2022-10-18
  • 如何分析一条select语句引起的瓶颈问题
    本篇文章给大家分享的是有关如何分析一条select语句引起的瓶颈问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。情境还原:&nbs...
    99+
    2022-10-19
  • Java RMI引起的log4j漏洞问题分析
    这篇文章主要介绍“Java RMI引起的log4j漏洞问题分析”,在日常操作中,相信很多人在Java RMI引起的log4j漏洞问题分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Jav...
    99+
    2023-06-22
  • mysql autocommit=0引起的业务hang住问题分析
    这篇文章主要讲解了“mysql autocommit=0引起的业务hang住问题分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql autocom...
    99+
    2022-10-19
  • row cache lock引起的性能问题的处理分析是什么
    本篇文章为大家展示了row cache lock引起的性能问题的处理分析是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 环境:主...
    99+
    2022-10-19
  • 一次rman恢复引起的nologging问题模拟
    测试环境:Oracle 11.2.0.4SLES 11SP4结论如下:no force logging,table nologging, dml nologging,出现ora-26040no force logging,table log...
    99+
    2023-06-06
  • GBase8s中唯一索引与非唯一索引问题的示例分析
    这篇文章主要为大家展示了“GBase8s中唯一索引与非唯一索引问题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“GBase8s中唯一索引与非唯一索引问题的示例分析”这篇文章吧。唯一索引...
    99+
    2023-06-29
  • Go语言中nil判断引起的问题详析
    前言 代码封装是百干不厌的事,但有时候封装会导致一些问题。本文记录了个人在封装 http 请求时遇到的一个和 nil 判断有关的问题。 nil 是什么 在 Go 语言中,布尔类型的...
    99+
    2022-11-12
  • DB2使用resize命令扩容表空间引起rebalance问题的分析
    问题描述: 最近一次表空间扩容,环境是DB2 10.1FP4,Suse 11.3,文件系统使用的是Symantec StorageFoundation,有个表空间共32个容器,每个容器大小都是20G,打算扩...
    99+
    2022-10-18
  • c# Struct的一些问题分析
    目录与类的区别:Struct的理论看过好一些,可是工作上基本没有应用过,Class倒处处都有。难道Struct就没有什么使用价值吗?搜了一下如何在类和结构中做出选择? Ϩ...
    99+
    2022-11-12
  • 如何分析DB2 SSL配置遇到的一个问题
    这期内容当中小编将会给大家带来有关如何分析DB2 SSL配置遇到的一个问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。配置完DB2 Server端,然后配置db2 cl...
    99+
    2022-10-19
  • 关于C++中由于字节对齐引起内存问题定位分析
    最近遇到了一个奇怪的问题,在创建对象时程序异常退出,具体地,在构造函数中访问类中最后一个成员变量时,程序异常退出。 问题定位 查看代码,发现该类中有一个结构体数组,该结构体在类的外面...
    99+
    2022-11-12
  • SpringCloud前后端分离后引起跨域访问的示例分析
    这篇文章主要为大家展示了“SpringCloud前后端分离后引起跨域访问的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringCloud前后端分离...
    99+
    2022-10-19
  • 关于HashMap 并发时会引起死循环的问题解析
    今天研读Java并发容器和框架时,看到为什么要使用ConcurrentHashMap时,其中有一个原因是:线程不安全的HashMap, HashMap在并发执行put操作时会引起死循...
    99+
    2022-11-12
  • Python 模板引擎的注入问题分析
    这几年比较火的一个漏洞就是jinjia2之类的模板引擎的注入,通过注入模板引擎的一些特定的指令格式,比如 {{1+1}} 而返回了 2 得知漏洞存在。实际类似的问题在Python原生字符串中就存在,尤其是P...
    99+
    2022-06-04
    模板 引擎 Python
  • MySQL主从不一致的问题分析
    这篇文章主要讲解了“MySQL主从不一致的问题分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL主从不一致的问题分析”吧!  &nbs...
    99+
    2022-10-18
  • Python C扩展的引用计数问题分析
    这篇文章主要讲解了“Python C扩展的引用计数问题分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python C扩展的引用计数问题分析”吧!Python GC机制对于Python这种...
    99+
    2023-06-19
  • JS语法中由 ++[[]][+[]]+[+[]] = 10引发的问题分析
    本篇内容主要讲解“JS语法中由 ++[[]][+[]]+[+[]] = 10引发的问题分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS语法中由 ++[[]...
    99+
    2022-10-19
  • MySQL复制问题的三个参数分析
        今天星期二,早上居然起晚了,上班迟到了,简直是。。。废话不多说,在昨天的文章中,我们提到了三个参数,分别是: slave_exec_mode参数; sql_slave_...
    99+
    2022-05-25
    MySQL 复制 MySQL 复制问题 MySQL 复制参数
  • mysql 5.7.11查询分区表的一个问题
    mysql 查询一个分区表,当查询条件存在数据时执行效率OK,当不存在数据时执行不完,一直在sending data,当去掉desc就没问题。换个版本貌似也没问题。 mysql> sele...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作