11-04(周日)中午12:00-13:00,由于数据库CPU占用接近100%导致系统不可用。
一、生成出12:00-14:00的数据库报告,先做一轮排查
1. DB Time为1,360.70 (mins),工作日8:00-12:00的DB time为400(mins)以下,说明CPU的消耗确实不正常。
2. 检查Top 5 Timed Events,与平常没有差别。
3. 检查消耗CPU的SQL,也没有发现异常。倒是发现有4条SQL语句执行超过百万次,与平常比很不正常,不过消耗的CPU很小。
二、从当时的AWR报告中找不出问题,然后生成一份对比报告
对比3号同时间内的情况,发现了几个指标差别很大,但同时也没有线索,如排序的指标差别很大。
三、想从用户当时做了什么操作入手
咨询实施人员,没有得到信息,然后查历史执行的SQL,根据快照的id查dba_hist_sqlstat和dba_hist_sqltext这两个表,发现有一条SQL非常可疑,执行的次数在此时段段是最多的,如下:
select dbms_lob.substr(b.sql_text, 2000),a.executions_total,
a.fetches_total,a.cpu_time_total,a.elapsed_time_total
from dba_hist_sqlstat a, dba_hist_sqltext b
where a.sql_id = b.sql_id
and dbms_lob.substr(b.sql_text, 2000) like '%OUTER_TABLE_ROWNUM FROM (SELECT OPERATEWRIT%'
and a.snap_id >= 18426
and a.snap_id <= 18428;
这条SQL其实是一个翻页的功能,只是每次翻页的页码不一样,一共有132次翻页,每次翻页执行13次,每次消耗28s。只有找开发组去排查了。