一则备库CPU报警的思考

今天收到一封报警邮件,这引起了我的注意。当然过了一会,有收到了CPU使用率恢复的邮件。
报警邮件内容如下:

ZABBIX-监控系统:
------------------------------------
报警内容: Disk I/O is overloaded on ora_statdb2_s_xxx@xxxxx
------------------------------------
报警级别: PROBLEM
------------------------------------
监控项目: CPU iowait time:14.1 %
------------------------------------
报警时间:2016.01.05-03:31:26
看到这封报警邮件,不知道大家作何感想,有什么疑问吗?
首先第一个疑问,为什么备库会报出CPU异常的邮件,到底是什么操作导致。
第二,为什么是备库报警,主库为什么没有报警。
第三,怎么去杜绝或者减少这类报警。
其实对这个问题做了分析,就会发现里面还是有一些治标治本的含义。
首先来逐步分析这个问题,为什么备库会报出CPU异常,这是一个OLAP的数据库,11gR@,CPU使用异常,是否是因为备库在做大量的报表查询?
要想验证这个问题,可以用一个直接了当的sql来说明。
SQL> select username,count(*)from v$session group by username;
USERNAME                         COUNT(*)
------------------------------ ----------
                                       32
PUBLIC                                  3
SYS                                     1
所以其他的设想都不存在,这个库没有其它的应用程序连接,可以简单来说就是在默默接收归档。
那么备库的CPU使用率为什么这么高,我们也可以结合很多原因来看,当然从数据库日志里面也能看出一些端倪来,那就是归档切换频率还是蛮高的。
可以看到网卡的繁忙程度,其实在一个时间段里还是比较集中的。

那么就可以从主库来分析一下归档的情况了。
当然我也确实比较懒,能看到图形报告就肯定不愿意多去拿更多的命令去分析了。
主库的归档切换频率如下,可以看到系统在特定的时间段里还是比较繁忙的。

但是话说回来,这是一个OLAP,怎么比OLTP还繁忙。
如果排除系统的原因,那么更多的可能性就是sql语句了。不过还有一个问题需要弄明白,是不是每天都会这样,因为不是每天都收到报警邮件。
我们来看看七天之内的归档情况。可以看到在每天的固定时间段里,归档切换还是比较频繁的,尤其在今天更为明显。

当然这个地方我还要补充一下,图形结果都是片面的,更好的说明还有一个文本的报告。
也是下面的文本报告给我了思路。

如果仔细看看,发现其实在每周的周二都会有一个时间段产生大量的归档。
如此一来,想必有些朋友应猜出来了,应该是scheduler导致,这个也是我最后定位问题的一个很好的方向。结合一个星期还不够,结合了大半个月的数据才发现了这个规律。
那么可以去查看awr报告看看哪些scheduler在运行。
还是用脚本吧。62033是问题时间段附近的快照号。就得到了下面的sql列表。
$ sh showsnapsql.sh 62033
---------- ------------- ---------------- ---------- ----------
     62033 75ubgcf0pdrkr                0 1802s      19%
     62033 36s5j5zrztscz                0 1802s      19%
     62033 882jz57wm9cj7                0 1802s      19%
     62033 gab74zwuduz76                0 1678s      18%
     62033 0fhgdzus0hu2t                0 1628s      17%
毫无疑问,这几个里面应该就有我们需要找到的目标,可以看到top 5的sql语句都是执行了近半个小时,executions都为0.所以还是有很大的可能性。
抓取到了几个大查询sql,几个update,当然最重要的就是其中的一个scheduler了。
SQL_FULLTEXT
----------------------------------------------------------------------------------------------------
BEGIN proc_update_cardinfo(); END;
其实top 5中的sql语句都会直接间接在这个scheduler中调用的存储过程中存在。而这个语句的一个核心语句就是下面的形式。
SQL_FULLTEXT
----------------------------------------------------------------------------------------------------
UPDATE TESTINFO A SET A.MAX_LEVEL = NVL((SELECT USER_CLASS FROM ROLE_CLASS_INFO B WHERE A.GROUPID =
B.GROUP_ID AND B.CN_GUID = A.ROLE_GUID), A.MAX_LEVEL) WHERE DRAWED = 'Y'
表里的数据都在亿级,所以全表也会很长时间,消耗也是非常的大。
当然后续就是看看这个语句,还有什么改进的空间,这个还是得和开发的同学好好讨论一下。
然后最后的问题,为什么主库没有这类的报错。
有两个数据可以佐证,那就是主库的内存是132G,备库是32G,主库的CPU是24,而备库是8,相差比较悬殊,也难怪会出现这样的问题。
所以通过备库的CPU报警我们发现备库存在大量的日志切换,然后把注意力很自然转移到主库,发现在特定的时间段里会产生大量的归档,而大量的归档的产生会给备库造成一些系统压力,导致CPU负载过高,但是根本的是为什么主库的归档产生非常多,和主库中的而一个scheduler有关,所以最后的根本就是调优这个scheduler看看,有多大的改进空间。

时间: 2024-10-23 18:22:27

一则备库CPU报警的思考的相关文章

备库CPU使用异常优化

一般在一些容灾环境中,尤其是在11g的ADG非常普及的场景下,备库被赋予了更多的责任,很多时候在容忍一些延迟的情况下,有些应用的大量数据查询任务直接放到了备库,把它当做一个只读节点来使用,所以在有些情况下,可能备库的压力还是蛮大的. 最近自从把备库纳入zabbix的监控体系之后,有一个备库总是在午夜发来一条报警邮件.内容大体如下: adb0_s1@10.127.xx.xx_报警 ------------------------------------ 报警内容: CPU utilization

备库报警邮件的分析案例(一)

今天早上到了公司后,收到了这样一封报警邮件,发现收到备库的报警案例也比较多,着实颠覆了我对备库基本不需要关注管理的观点.后面可以把几个案例做成一个主题来说说. 报警邮件的内容如下:  ZABBIX-监控系统: ------------------------------------ 报警内容: DG_issue ------------------------------------ 报警级别: PROBLEM ------------------------------------ 监控项目:

备库报警邮件的分析案例(二)

在第一篇中分享了关于备库报警邮件的分析,发现很多问题都是一环扣一环. 起初是通过监控主库中的v$dataguard_status发现备库中可能存在一些问题,结果逐步分析,发现是由备库的crontab触发了备库的定时read-only和online状态,(即只读和应用日志,10gR2的环境),而这些关键信息都是从数据库的alert日志中发现的,但是问题还没有完,才刚刚开始,因为发现备库中竟然有ORA-1652: unable to extend temp segment by 128 in tab

备库报警邮件的分析案例(三)

继前两篇分析了一个看似非常普通的报警邮件,结果在分析问题的时候八面玲珑,相关因素都给分析了一下,没想到还真是有不小的收获. 前两篇地址: http://blog.itpub.net/23718752/viewspace-1827685/ http://blog.itpub.net/23718752/viewspace-1829630/ 最后通过手工定位监控的方式终于把罪魁祸首揪了出来,为什么在备库使用ash无果,因为还是10g的库,还没有这个特性,在11g中才可以.这个也算是在10g中的一个监控

由报警邮件分析发现的备库oracle bug

昨天到公司之后,收到两份封报警邮件,可以看到在早晨6:30左右主库的v$dataguard_status检查时发现了一个错误.然后再2分钟后就自动恢复了. 一般这种问题很自然想到可能是网络出现了一些问题.因为自动恢复了,所以也不同太着急处理,于是细细看了下.报警邮件如下: ZABBIX-监控系统: ------------------------------------ 报警内容: DG_issue ------------------------------------ 报警级别: PROBL

一封备库报警邮件的分析

对于orabbix报出的警报,自己都是心怀敬畏,因为这些表面的现象如果深入分析没准就能有所收获,当然目的还是解决问题,不是一味追求指标. 今天收到的报警邮件如下,然后在两分钟后问题自动恢复. ### ZABBIX-监控系统: ------------------------------------ 报警内容: DG_issue ------------------------------------ 报警级别: PROBLEM ----------------------------------

你的备库做好准备了吗

这篇文章计划了一段时间,本来想写篇心情文字,还是留到周末再放飞心情吧. 今天的内容是关于数据库的备库的思考,当然我们可以自己问自己,我们的备库准备工作做好了吗?扪心自问,其实有些工作我也没有准备好,这是我的建议,其实一个备库的思考点还是有很多值得考量和斟酌的地方.自己也需要后续完善 备库总是在容灾中有着举足轻重的作用,但是故障难免,我们的备机备库是否能够在危机降临的时候顶住压力,这个需要打上一个问号,我会从硬件配置,系统层面,数据库层面,架构层面和网络层面进行一些分析.硬件配置    备库硬件配

PostgreSQL 10.0 preview 功能增强 - 备库支持"时间、字节"六维延迟

标签 PostgreSQL , 10.0 , 时间度量备库延迟 , pg_stat_replication 背景 pg_stat_replication视图中有4个字段记录了从备库反馈的WAL位点.如下: postgres=# \d pg_stat_replication View "pg_catalog.pg_stat_replication" Column | Type | Modifiers ------------------+-------------------------

数据库内核月报 - 2015 / 08-PgSQL · 答疑解惑 · RDS中的PostgreSQL备库延迟原因分析

背景 在RDS环境中,多租户使用同一台主机是很常见的事情,为了隔离用户资源,有很多手段,例如使用虚拟机,或者CGROUP技术.以CGROUP为例,可以控制进程的CPU使用.内存使用.块设备的IOPS或者吞吐速率等资源使用.限制资源的好处是可以在共用的硬件层面为多个用户提供承诺的性能指标.当然这种方法也有一定的弊端,例如当用户需要运行消耗较多资源的SQL的时候,无法利用机器的空闲资源,因为它被限制住了.还有一些弊端可能导致RDS的不稳定,本文将展开讨论其中的弊端之一,资源限制是如何导致备库延迟的.