由一条报警信息发现的一系列问题

今天看到一条报警短信,提示是某个表空间的问题。
ZABBIX-监控系统:
------------------------------------
报警内容: Tablespace Usage warning
------------------------------------
报警级别: PROBLEM
------------------------------------
监控项目: showtsps:-->TS_NAME:UNDOTBS1 :4.8% Free
------------------------------------
报警时间:2016.01.03-17:02:44
如果出现这种问题,而且是undo表空间的,我们是不是可以直接忽略了,一般情况下还是可以的,但是如果频频出现这种问题,那么还是需要来分析一下,倒底是什么原因。因为服务器归属不是我,我就帮忙看了一下环境,但是查看过程中发现了很多的问题,很多问题还是值得借鉴的。
首先查看表空间的使用情况,目前这个库有近1.5T,undo的设置了一个数据文件,也就意味着空间大小在30G左右,具体处理的业务我不太清楚,但是查看报告的内容来看还是偏OLAP.
那么为什么会在某一个时间段里有大量的undo报警呢,主要原因应该是在这个时间范围内发生了大量的dml,尤其是delete级的操作。
带着疑问,首先查看了归档的情况。可以很清晰的看到在一个小时内归档进行了频繁的切换,大概切换了近300多次。每个日志member大小为200M

而DB time的情况呢,印象中么有报负载突然暴增的短信报警。

可以看出来,虽然短时间内负载从20%提高到了160%,对于多CPU的服务器而言,这个DB time提升还是不够明显,目前设定的阀值在300%~400%左右。所以没有收到报警。
那么这么看来是在短时间内发生了频繁的dml操作,对于数据库负载而言没有很明显的影响。
然后就查看了一番awr报告。

Per Second Per Transaction Per Exec Per Call
DB Time(s): 1.2 1.7 0.03 0.07
DB CPU(s): 0.6 0.8 0.01 0.03
Redo size: 11,675,379.4 16,550,679.0    
Logical reads: 88,012.5 124,764.0    
Block changes: 67,547.0 95,752.7    
Physical reads: 2,804.4 3,975.4    
Physical writes: 1,236.4 1,752.7    
User calls: 17.7 25.1    

可以看出redo的生成量还是不少,查看top等待事件,发现近一半多的DB time在DB CPU上,那么剩下的加起来还不到60%,可见还是很可能是sql执行时间过长导致了DB time的计算出现二来一些偏差。

Event Waits Time(s) Avg wait (ms) % DB time Wait Class
DB CPU   2,081   48.72  
db file scattered read 403,937 247 1 5.78 User I/O
db file sequential read 40,286 159 4 3.72 User I/O
enq: RO - fast object reuse 3,259 150 46 3.51 Application
log file switch (checkpoint incomplete) 295 121 409 2.83 Configuration

查看top sql的情况如下:

Elapsed Time (s) Executions %Total %CPU %IO SQL Id SQL Module SQL Text
2,334.45 1 54.65 74.10 14.43 b5mvd0c0n042y DBMS_SCHEDULER DECLARE job BINARY_INTEGER := ...
311.81 6 7.30 48.02 63.04 8fswm0xac24qw DBMS_SCHEDULER SELECT COUNT(DISTINCT CN) FROM...
228.24 6 5.34 70.22 31.59 bqcq22gdua2c0 JDBC Thin Client select total from ( select STA...

可以看到top1的sql是在做一个scheduler的任务,执行了近一个小时,时间情况和问题情况是相符的。
通过scheduler可以看到正在调用的job
select dbms_metadata.get_ddl('PROCOBJ', 'EVERYDAY_CALL_DAY_BO',SCHEMA=>'QUERY_ORG_TESTS') from dual;
job会中调用一个存储过程,而这个存储过程里面会间接调用若干个子存储过程,所以调用关系看起来还是蛮复杂的。
可以直接查看dba_tab_modifications看到一个概要的信息。
$ sh showtabstat.sh  QUERY_ORG_TESTS      MONTH_BILL_OUT_BO
*******************************************
OWNER                          TABLE_NAME
------------------------------ ------------------------------
QUERY_ORG_TESTS                MONTH_BILL_OUT_BO    
*******************************************
PARTITION_NAME       SUBPARTITION_NAME      INSERTS   UPDATES   DELETES CHG_TIMESTAMP        TRU DROP_SEGMENTS
-------------------- -------------------- --------- --------- --------- -------------------- --- -------------
                                             300001         0    300000 2016-01-03 17:23:13  NO              0
MONTH_BILL_OUT_BO_DEFAULT                              1         0         0 2016-01-03 18:04:56  NO              0
可以看到在今天的时间段内,发生了30万次的insert,30万次的delete操作,可见这种实现方式中还是在做旧数据的删除然后再重新插入数据,逻辑上看起来似乎还是有点问题,看看代码里面是怎么写的吧,里面用到了bulk collect,insert all这样的用法,里面会递归调用大批量的insert values这样的语句,其实这种方式还是不够好,insert select其实可以更快。
然后上面的信息不知道各位还看出什么端倪了吗,操作中设计的表有一个分区为MONTH_BILL_OUT_BO_DEFAULT,这个分区从字面意思来看似乎有些不对劲啊。
查看分区的规则。可以赫然看到最近的一次分区是2014年,也就是前年的分区了,2015年的数据都放在了默认的分区中,看起来还是不太应该啊。
MONTH_BILL_OUT_BO_201412  TO_DATE(' 2014xxxx')   MONTH_BILL           1 YES     DISABLED YES 04-DEC-14        285585
MONTH_BILL_OUT_BO_DEFAULT MAXVALUE                        USERS               1 YES     DISABLED YES 04-JUL-15       1040915
好了,这个也算是一个问题,那么历史数据能否通过truncate partition清理呢,我查看了一下分区索引的情况,发现索引都是清一色的global index,那么这种方式看来都得重建索引了。又是一个问题。
那么还有什么问题吗?看看数据库日志里面怎么说。可以看到在问题时间段里进行了频繁的日志切换,那么标黑的部分又是一个问题了。
LNS: Standby redo logfile selected for thread 1 sequence 181128 for destination LOG_ARCHIVE_DEST_2
Sun Jan 03 17:08:16 2016
Archived Log entry 287889 added for thread 1 sequence 181127 ID 0x953bfa86 dest 1:
Thread 1 advanced to log sequence 181129 (LGWR switch)
  Current log# 4 seq# 181129 mem# 0: /home/app/oracle/oradata/test/redo04.log
LNS: Standby redo logfile selected for thread 1 sequence 181129 for destination LOG_ARCHIVE_DEST_2
Deleted Oracle managed file /U01/app/oracle/oradata/test/arch/testX/archivelog/2016_01_01/o1_mf_1_180672_c8d4j7df_.arc
Deleted Oracle managed file /U01/app/oracle/oradata/test/arch/testX/archivelog/2016_01_01/o1_mf_1_180673_c8ddmy75_.arc
Sun Jan 03 17:08:28 2016
Archived Log entry 287891 added for thread 1 sequence 181128 ID 0x953bfa86 dest 1:
这是11g对于归档的一种保护性清理,在使用闪回区并且大小在80%左右的时候,会开始清理已经应用的归档,那么通过这个日志信息可以看出来其实归档的删除策略也存在一些问题。
那么目前的归档删除策略是什么样的。
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog until time "sysdate-1";
目前是只删除1天以前的归档,那么在今天的情况下,生成了大量的归档,
目前的crontab频率为
50 * * * * (. $HOME/.bash_profile;$HOME/dbadmin/scripts/rman_trun_arch.sh)
也就是每个小时触发一次,那么归档的删除策略是删除一天以前的,短时间内的归档肯定删除不了,这也就涉及一个归档的删除策略的设计方式,归档的删除如果有执行窗口,设定的时间还是要保留一定的延时,其实这种情况在10gR2中比较多,就是因为备库需要在online,read-only之间切换,11gR2不存在这类问题了。
所以这个问题也可以重视一下。
然后再做一个简单的测试,查看备库的ADG是否启用,结果这一次还让我猜中了。
SQL> conn testdba/xxxxx
ERROR:
ORA-01033: ORACLE initialization or shutdown in progress
Process ID: 0
Session ID: 0 Serial number: 0
也就意味着备库在mount,不是read only。原因就在于compatible的参数设置所限。
SQL> show parameter compa
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
compatible                           string      10.2.0.3.0
看来一个小小的报警信息辐射开来还是能够发现不少的问题来,还是需要多加注意。

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

由一条报警信息发现的一系列问题的相关文章

一条简单的报警信息发现的oracle bug

系统中有这样一条报警信息,看似比较简单,但是引起了我的注意,主要原因是因为这是一个10gR2的备库,备库如果出现这样的问题,看起来似乎是在归档删除上存在一些问题. [DB监控系统]_ora_test_s2_yangjr@10.127.2.133_报警 ZABBIX-监控系统: ------------------------------------ 报警内容: Free disk space is less than 20% on volume /opt --------------------

两条报警信息的分析(第二篇)

还是继续分析报警信息的关联,下面两个看似没有直接联系的报警信息其实很有关联. 下面是主库的报警的信息,查看v$dataguard_status得到了最新的错误信息. ############################# [DB监控系统]_adb2_p@10.127.xx.19_报警 ZABBIX-监控系统:  ------------------------------------ 报警内容: DG_issue ------------------------------------ 报警

两条报警信息的分析(第一篇)

任何规则都是固定的,但是人是活的,很多时候把一些细节之处结合起来,还是能够发现一些潜在的问题. 早上收到zabbix的报警,是两条看似很平常的短信. 一封邮件内容如下,这是一封报警邮件 报警内容: Free disk space is less than 20% on volume /U01 ------------------------------------ 报警级别: PROBLEM ------------------------------------ 监控项目: Free disk

电脑公司客服人员窃取几十万条客户信息

本报讯(记者王蔷 通讯员林洁)闻听公司要降薪,产生离职念头的某电脑公司 客服人员程某窃取了几十万条客户信息,以每条1分钱的价格出售,使公司的300多名客户掉进诈骗陷阱.昨天海淀检察院透露,程某等涉嫌出售公民个人信息案已被受理. 27岁的程某是北京某电脑公司的客服人员.他通过公司内部局域网共享的方式进入同事的电脑,拷贝了一部分公司的客户资料.这些资料包括客户的姓名.身份证号以及在该公司的购物记录.2009年10月,程某获知公司要降薪,遂产生了离职的念头,并打算将自己盗取的客户资料卖掉.程某找到自己

60.5亿条个人信息存泄露风险 5元可买百条的网银四大件

五块钱可以买一百条的网银四大件信息,包括用户姓名.账号.密码.电话等,网上个人信息"贱卖"成为网络诈骗的一个必经的环节.上周末,在深圳召开的补天白帽大会上,补天平台发布的<2016年网站泄漏个人信息形势分析报告>(以下简称<报告>)的数据显示,2016年补天平台共收录了可以导致个人信息泄露的网站漏洞359个,总计可能泄露个人信息60.5亿条.信息安全专家表示,一旦被不法分子利用,极有可能对用户信息安全造成重大危害. 单个漏洞的危害大大增加 <报告>数

60.5亿条个人信息存泄露风险 5元可买百条网银信息

五块钱可以买一百条的网银四大件信息,包括用户姓名.账号.密码.电话等,网上个人信息"贱卖"成为网络诈骗的一个必经的环节.上周末,在深圳召开的补天白帽大会上,补天平台发布的<2016年网站泄漏个人信息形势分析报告>(以下简称<报告>)的数据显示,2016年补天平台共收录了可以导致个人信息泄露的网站漏洞359个,总计可能泄露个人信息60.5亿条.信息安全专家表示,一旦被不法分子利用,极有可能对用户信息安全造成重大危害. 单个漏洞的危害大大增加 <报告>数

涉及美国军方、企业等上千万条员工信息的数据库泄露

3月16日讯 近日美国商业服务巨头Dun&Bradstreet的52GB数据库遭到泄露,这套数据库中包含超过3300万条记录,具体包括政府部门与大型企业客户,有证据证实,其曾面向营销厂商出售过. 涉及美国军方.企业等上千万条员工信息的数据库泄露 - E安全 这套数据库整体约为52 GB,包含3380万条惟一电子邮箱地址与成千上万条企业员工联系信息,其影响范围已经占据美国企业从业者的可观比例. 商业服务巨头Dun & Bradstreet证实是该数据库拥有者,并透露这是2015年一笔1.25

信息 “裸奔”:2016 年网民人均被泄八条个人信息

报告显示,2016年发现的网站漏洞,可泄露个人信息60.5亿条:实名制信息和上网行为记录的泄露,比想象的还要多 骗子能在茫茫人海中找到你实施精准诈骗,一个重要原因就是骗子详细掌握了你的个人信息.最新研究显示,有大量公民个人信息泄露是由于网站存在安全漏洞导致. 3月30日,补天漏洞响应平台(下称补天平台)在补天白帽大会上发布<2016年网站泄露个人信息形势分析报告>(下称<报告>)披露,2016年发现的网站漏洞可能导致超过60亿条个人信息泄露. 单个漏洞最多泄露个人信息超5亿条 20

如何一次性删除所有VNX的报警信息?

故障现象: VNX系列,报警日志总是一条一条的出现,删一条再出一条,如何一次性删除所有VNX的报警信息? 解决方案: VNX for Block:如果在Unisphere界面告警信息多次无法删除,可以通过重启restart management server服务来解决: VNX for File:登录到命令行,到目录/nas/log/webui中,编辑alert_log文件,该文件就保存着Unisphere界面的告警信息,删除文件里面的内容就好了.