ITPub博客

首页 > 数据库 > Oracle > 单条SQL造成某核心BOSS系统雪崩-记一次现场Oracle数据库异常分析恢复-orastar

单条SQL造成某核心BOSS系统雪崩-记一次现场Oracle数据库异常分析恢复-orastar

原创 Oracle 作者:orastar 时间:2017-05-04 14:34:48 0 删除 编辑

1、故障描述

4月1日14:50-16:05 某核心BOSS系统数据库服务异常, 部分业务无法对外提供服务。

2、问题分析



2.1    数据库在线活动进程分析

用统计学的方法分析数据库每个时间点的在线活动进程数(数据库服务器为16C 、ORACLE 2结点RAC 版本11.2.0.4)。

3月31日数据库在线活动进程: 4个,低负载,4个进程共享32个CPU。

4月1日数据库在线进程: 60个在线活动进程, 2个进程争用1个CPU(以前是1个进程共享8个CPU!!!),数据库服务异常。

 

2.1.1     分析结论

由上面两图分析,4月1日数据库负载为正常情况的15倍,数据库服务异常。

2.1.2     提出疑问

哪些进程及SQL造成数据库活动进程大幅增加?(下章分析)

 

2.2    数据库活动SQL分析

对数据库运行SQL进行统计分析,发现数据库后台大批量进程在执行SQL: 07ht123456789,数据库事件为:全表扫描,且无其它事务阻塞,统计该SQL在同一时间点的执行情况。

3月31日SQL: 07ht123456789同时运行活动进程数均值:3个(日常活动进程4个,它占3个,平时就有性能隐患)。

4月1日SQL: 07ht123456789同时运行活动进程数均值:60个

 

2.2.1     结论

SQL_ID:07ht123456789在同一时间点的运行数量为平时的20倍,可以确认该SQL是造成数据库服务异常的“病灶” (下章对此异常SQL分析)。

2.3    异常SQL分析

2.3.1     SQL内容

SQL_id: 07ht123456789

Sql语句:

select count(distinct p.cn)

  from ht_idx p

 where p.loginstate = 'true'

    and p.logindate = :3

2.3.2     执行计划


2.3.3     业务表信息

查看表PORTAL_IMS_IDX数据量为: 4492744

查看此表数据保留天数据:31天

 

3、为什么以前都正常



为什么以前都正常,今天突然异常呢?这条语句是新程序吗?见下文分析。

3.1    问题一、SQL是新程序吗?


1月份此SQL都在运行,证明不是新程序。

3.2    问题二、SQL每小时执行多少次?

系统名称

SQL_ID

时间

执行次数

平均执行时间(秒)

核心系统

07ht123456789

3月28日8点-9点

3106

1.481

核心系统

07ht123456789

3月29日8点-9点

2966

1.514

核心系统

07ht123456789

3月31日8点-9点

2855

1.561

核心系统

07ht123456789

4月1日8点-9点

1141

108.441

单条SQL 每小时执行3000次!!!

3.3    问题三、SQL今天比平时慢100倍?

查看28日SQL统计信息

查看31日SQL统计信息

查看4月1日SQL统计信息

Buffer gets: 从数据库缓存读数据。(逻辑读)

Disk reads: 从数据库存储读数据。(物理读)

原来大批量的数据都是从存储读数据,所以造成数据库服务异常。

3.4    查看AWR是否与上述一致?

查看3月31日AWR报告,物理读正常。

查看4月1日的AWR显示有大量的物理读。

 

结论:大批量的物理读造成SQL语句异常缓慢,造成数据库服务异常。

3.5    4月1日有如此大的物理读?

4月1日凌晨系统升级重启过数据库,数据库重启后缓存会被清空,第二天大批量存在性能问题的语句执行时,大量物理读,造成数据库服务异常。

3.6    总结

    400W数据量全表扫描查询每小时执行3000次,在数据库重启缓存被清空后,大量物理读造成数据库服务异常。

4、数据库恢复



将业务表进行历史数据归档后,数据库恢复正常。

5、故障原因



1、      SQL(SQL_ID: 07ht123456789) 性能问题,400W数据全表扫描查询,造成后台大批量进程同时执行此语句,造成数据库异常。

2、      ht_idx(业务表)故障时存储了31天历史数据,未及时进行历史数据归档(已与业务沟通该表应该每天进行历史数据归档)。

3、      数据库重启后缓存被清空,业务高峰期大量物理读造成数据库异常。

6、优化建议



1、      建议开发厂商优化语句(SQL_ID: 07ht123456789)。

2、      建议及时对表ht_idx进行历史数据归档。

3、      建议加强对信息系统数据库监控,及时发现数据库异常,提前消除安全隐患。

4、      加强信息系统常态SQL审核优化,提前发现并优化TOP SQL。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31442014/viewspace-2138413/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
作者简介:惠星星,现就职于云和恩墨,持有OCP 10g、OCP 11g、OCM 11g证书,并有长达8年电力行业业务维护、数据库维护服务经验,擅长Oracle数据库性能优化、故障处理及Oracle internal研究。

注册时间:2017-03-08

  • 博文量
    171
  • 访问量
    429749