看完该篇文章你可以了解如下问题:resmgr:cpu quantum等待事件的知识,如何模拟该等待事件,如何避免该事件。

数据库版本:

SYS@zkm> select banner from v$version where rownum=1;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

其实我是想模拟"latch: cache buffers chains"事件,结果模拟出来的事件是"resmgr:cpu quantum",所以模拟过程涉及到cbc相关知识。其实该事件只需要在资源管理任务期间模拟大量的逻辑读即可,因为逻辑读消耗CPU。

以下是正文:

SYS@zkm> create table scott.test as select 1 id from dual;

Table created.

SYS@zkm> select dbms_rowid.rowid_relative_fno(rowid) file_id,dbms_rowid.rowid_block_number(rowid) block_id from scott.test;

   FILE_ID   BLOCK_ID
---------- ----------
4 523 SYS@zkm> select rowid from scott.test; ROWID
------------------
AAAVqcAAEAAAAILAAA

查询表的4号文件523号块的latch地址。

SYS@zkm> select hladdr from x$bh where dbablk=523 and dbarfil=4;

HLADDR
----------------
000000008CD4A658

查询该latch地址所保护的buffer还有哪一些。

SYS@zkm> set linesize 500
SYS@zkm> col what for a50
SYS@zkm> select a.owner||'.'||a.object_name what,dbarfil,dbablk,a.data_object_id,a.object_id from dba_objects a,x$bh where hladdr='000000008CD4A658' and a.data_object_id=x$bh.obj; WHAT DBARFIL DBABLK DATA_OBJECT_ID OBJECT_ID
-------------------------------------------------- ---------- ---------- -------------- ----------
SYS.VIEW$ 1 73659 69 69
SYS.I_DEPENDENCY1 1 60645 106 106
SYS.C_OBJ#_INTCOL# 1 95582 444 444
SYS.HISTGRM$ 1 95582 444 446
SCOTT.TEST 4 523 88732 88732

以SYS.HISTGRM$为例子,查询1号文件95582块row编号为0的行的rowid。

SYS@zkm> select dbms_rowid.rowid_create(1,444,1,95582,0) from dual;

DBMS_ROWID.ROWID_C
------------------
AAAAG8AABAAAXVeAAA --或者
SYS@zkm> select rowid from SYS.HISTGRM$ where dbms_rowid.rowid_relative_fno(rowid)=1 and dbms_rowid.rowid_block_number(rowid)=95582 and dbms_rowid.rowid_row_number(rowid)=0; ROWID
------------------
AAAAG8AABAAAXVeAAA

会话sid:41做如下动作:

SYS@zkm> /

PL/SQL procedure successfully completed.

SYS@zkm> l
1 declare
2 a int;
3 begin
4 for i in 1..10000000 loop
5 select count(*) into a from SYS.HISTGRM$ where rowid='AAAAG8AABAAAXVeAAA';
6 end loop;
7* end;

同时,会话sid:26做如下动作:

SYS@zkm> /

PL/SQL procedure successfully completed.

SYS@zkm> l
1 declare
2 a int;
3 begin
4 for i in 1..10000000 loop
5 select count(*) into a from scott.test where rowid='AAAVqcAAEAAAAILAAA';
6 end loop;
7* end;

同时其他会话的情况:

SYS@zkm> show parameter resource_manager_plan

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
resource_manager_plan string SCHEDULER[0x32D9]:DEFAULT_MAIN
TENANCE_PLAN SYS@zkm> select sid,event,p1raw,p2raw from v$session where wait_class<>'Idle'; SID EVENT P1RAW P2RAW
---------- ---------------------------------------------------------------- ---------------- ----------------
26 resmgr:cpu quantum 0000000000000003 000000000000325B
41 resmgr:cpu quantum 0000000000000003 000000000000325B
42 SQL*Net message to client 0000000062657100 0000000000000001

可以看到,26和41会话出现“resmgr:cpu quantum”等待。

查询相关资料,11g以后每天固定时间会运行资源管理任务,主要是保证作业期间有cpu资源去保证收集新的优化器状态、为昂贵的SQL找到更好的执行计划、清空AWR等动作。

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

当启用资源管理器并限制CPU消耗时会发生此等待。为了减少此等待事件的发生,可以增加会话当前消费组的CPU分配,因此下边方法中的第三种不要一味去禁用该任务,要了解瓶颈是否是cpu足够只是被限制了才出现“resmgr:cpu quantum”事件的 。

其实我的虚拟机配置很低,只有1个线程,资源管理任务是否开启对资源的调用时一样的。本来我是想做资源管理任务开启和关闭时候运行时间的比对的,由于我的配置问题看不出查询时间的差别。

只不过在资源管理任务关闭时,"resmgr:cpu quantum"就不存在了,但是top看cpu使用率还是将近100%。

那么如何避免资源管理任务的影响呢?

有三种方法:

1.既然是因为被限制了cpu的数量,那么增加会话当前消费组的cpu分配,使得会话有足够的cpu去运行sql语句。(该方法我没有验证过)

2.可以避开资源管理任务运行的时间段。

比如我的实验环境随时可以设置date -s " 2018-12-11 03:59:00"(周二),随后警告日志就出现(生产勿做此操作,此处只做测试):

Warning: VKTM detected a time drift.
Time drifts can result in an unexpected behavior such as time-outs. Please check trace file for more details.
Tue Dec 11 03:59:01 2018
Closing scheduler window
Closing Resource Manager plan via scheduler window
Clearing Resource Manager plan via parameter
Tue Dec 11 04:14:12 2018
Clearing Resource Manager plan via parameter
ALTER SYSTEM SET resource_manager_plan='' SCOPE=BOTH;

PS:所以测试时候想要这个资源任务来影响你的话,同样设置时间在相应的时间段内。

比如设置date -s " 2018-12-10 21:59:59",随后警告日志就出现:

Time drifts can result in an unexpected behavior such as time-outs. Please check trace file for more details.
Mon Dec 10 22:00:01 2018
Setting Resource Manager plan SCHEDULER[0x32D9]:DEFAULT_MAINTENANCE_PLAN via scheduler window
Setting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter
Mon Dec 10 22:00:01 2018
Starting background process VKRM
Mon Dec 10 22:00:02 2018
VKRM started with pid=36, OS id=4199
Mon Dec 10 22:00:06 2018
Begin automatic SQL Tuning Advisor run for special tuning task "SYS_AUTO_SQL_TUNING_TASK"
End automatic SQL Tuning Advisor run for special tuning task "SYS_AUTO_SQL_TUNING_TASK"

并且resource_manager_plan会被赋值:

SYS@zkm> show parameter resource_manager_plan

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------------------
resource_manager_plan string SCHEDULER[0x32D9]:DEFAULT_MAINTENANCE_PLAN

资源管理任务运行时间:

周一到周五:22:00到第二天2:00

周六周日:6:00到第二天2:00

详细查询select * from DBA_SCHEDULER_WINDOWS;

3.直接关闭任务。

ALTER system SET resource_manager_plan='';
EXECUTE dbms_scheduler.set_attribute('WEEKNIGHT_WINDOW','RESOURCE_PLAN','');
EXECUTE dbms_scheduler.set_attribute('WEEKEND_WINDOW','RESOURCE_PLAN','');
EXECUTE dbms_scheduler.set_attribute('MONDAY_WINDOW','RESOURCE_PLAN','');
EXECUTE dbms_scheduler.set_attribute('TUESDAY_WINDOW','RESOURCE_PLAN','');
EXECUTE dbms_scheduler.set_attribute('WEDNESDAY_WINDOW','RESOURCE_PLAN','');
EXECUTE dbms_scheduler.set_attribute('THURSDAY_WINDOW','RESOURCE_PLAN','');
EXECUTE dbms_scheduler.set_attribute('FRIDAY_WINDOW','RESOURCE_PLAN','');
EXECUTE dbms_scheduler.set_attribute('SATURDAY_WINDOW','RESOURCE_PLAN','');
EXECUTE dbms_scheduler.set_attribute('SUNDAY_WINDOW','RESOURCE_PLAN','');

或者(需要重启数据库):

alter system set "_resource_manager_always_on"=FALSE scope=spfile sid='*';
alter system set "_resource_manager_always_off"=TRUE SCOPE=SPFILE sid='*';

其他:关于资源管理任务更详细的说明

【Oracle】如何模拟resmgr:cpu quantum的更多相关文章

  1. resmgr:cpu quantum 等待事件 top 1

    早上看昨天现场的报告,发现晚上七八点,resmgr:cpu quantum 等待事件排在i第一位,如下: 该事件是和资源管理相关的,如果启用资源管理计划,就可能遇到这个问题. 所以常规的解决方案是禁用 ...

  2. resmgr:cpu quantum等待事件 触发的bug问题

    1>resmgr:cpu quantum等待事件 触发的bug问题  (处理心得) 1.客户反馈数据库服务器在某个时间段总是特别繁忙,获取awr报告分析繁忙原因

  3. Oracle“死锁”模拟

    本着实验优先的原则,先模拟死锁的发生,然后在列一下死锁产生的四个必要条件和处理死锁的一般策略. 1.创建两个简单的表t1_deadlock和t2_deadlock,每个表中仅仅包含一个字段asys@o ...

  4. Oracle查询语句导致CPU使用率过高问题处理

    解决此问题的关键在于如何找到造成CPU使用率过高的SQL语句.步骤如下: 1.使用Process Explorer工具查看到Oracle进程,双击Oracle进程,在弹出的属性窗口的Threads选项 ...

  5. Oracle 11g中查询CPU占有率高的SQL

    oracle版本:oracle11g 背景:今天在Linux中的oracle服务上,运用top命令发现许多进程的CPU占有率是100%. 操作步骤: 以进程PID:7851为例 执行以下语句: 方法一 ...

  6. Oracle实例占用超高CPU排查

    CPU主要功能:处理指令.执行操作.要求进行动作.控制时间.处理数据. 结合数据库实例CPU占用高,可能的原因是数据库在执行大量的操作(全表查询.大量排序等). 由于公司没有DBA,遇到数据库问题只能 ...

  7. Oracle VirtualBox 模拟Android系统 素材

    Android to x86 下载地址: http://www.android-x86.org/download VirtualBox 下载地址: https://www.virtualbox.org ...

  8. oracle死锁模拟

    环境介绍: 用户test01 创建表tab01,用户test02创建表tab02.Test01 更新tab01不提交,test02 更新表tab02不提交.然后test01 更新test02下的表ta ...

  9. Oracle资源管理器(二)-- 创建和使用数据库资源计划

    (参考 http://blog.csdn.net/mrluoe/article/details/7969436 -- 整理并实践通过) 第1步,创建3个用户 SQL> create user s ...

随机推荐

  1. Java实现蓝桥杯分金币

    分金币 圆桌旁坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币, 最终使得每个人的金币数目相等.你的任务是求出被转手的金币数量的最小值. 比如,n=4,且4个人 ...

  2. Java实现 LeetCode 202 快乐数

    202. 快乐数 编写一个算法来判断一个数是不是"快乐数". 一个"快乐数"定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过 ...

  3. Java实现 LeetCode 53 最大子序和

    53. 最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 ...

  4. java实现第三届蓝桥杯火柴游戏

    火柴游戏 [编程题](满分34分) 这是一个纵横火柴棒游戏.如图[1.jpg],在3x4的格子中,游戏的双方轮流放置火柴棒.其规则是: 不能放置在已经放置火柴棒的地方(即只能在空格中放置). 火柴棒的 ...

  5. Java实现第八届蓝桥杯纸牌三角形

    纸牌三角形 题目描述 A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算).要求每个边的和相等. 下图就是一种排法(如有对齐问题,参看p1.png). A 9 6 4 8 3 ...

  6. 关于virgo-tomcat-server-3.6.0.RELEASE服务的启动

    1.先查看程序是否启动,如果已经启动可以执行第3步的操作进行关闭. [user01@ ~]$ # ps -ef|grep java //查看virgo-tomcat-server的java进程是否存在 ...

  7. 移除VS解决方案中的TFS版本控制

    项目每次会弹出提示 正在打开的解决方案已绑定到以下 Azure DevOps Server 上的源代码管理: xxxxx.是否要联系此服务器以尝试启用源代码管理集成? 移除VS解决方案中的TFS版本控 ...

  8. apollo与springboot集成实现动态刷新配置

    分布式apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性. 本 ...

  9. 一文带你快速搞懂动态字符串SDS,面试不再懵逼

    目录 redis源码分析系列文章 前言 API使用 embstr和raw的区别 SDSHdr的定义 SDS具体逻辑图 SDS的优势 更快速的获取字符串长度 数据安全,不会截断 SDS关键代码分析 获取 ...

  10. [C#.NET 拾遗补漏]04:你必须知道的反射

    阅读本文大概需要 3 分钟. 通常,反射用于动态获取对象的类型.属性和方法等信息.今天带你玩转反射,来汇总一下反射的各种常见操作,捡漏看看有没有你不知道的. 获取类型的成员 Type 类的 GetMe ...