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

1、故障描述

4月11450-1605 某核心BOSS系统数据库服务异常, 部分业务无法对外提供服务。

2、问题分析



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

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

331数据库在线活动进程: 4个,低负载,4个进程共享32CPU

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

 

2.1.1     分析结论

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

2.1.2     提出疑问

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

 

2.2    数据库活动SQL分析

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

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

41SQL: 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

3288-9

3106

1.481

核心系统

07ht123456789

3298-9

2966

1.514

核心系统

07ht123456789

3318-9

2855

1.561

核心系统

07ht123456789

418-9

1141

108.441

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

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

查看28SQL统计信息

查看31SQL统计信息

查看41SQL统计信息

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

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

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

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

查看331AWR报告,物理读正常。

查看41日的AWR显示有大量的物理读。

 

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

3.5    41日有如此大的物理读?

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

请使用浏览器的分享功能分享到微信等