2009-08-05号,刚要下班的时候,我所在的项目组工作人员报告车管家系统现在运行非常慢,我马上意识到运行慢肯定是数据库出现了问题
马上进行了数据库检查:
(1)select * from v$session_wait;
发现大量的buffer busy waits和db file sequential read事件
(2)查询导致buffer busy waits和db file sequential read事件的sql语句
select s.sid,s.serial#,spid,sql_text,s.username,s.program,process
from v$sqlarea q,v$session s,v$process p where q.address=s.sql_address
and q.hash_value=s.sql_hash_value and s.paddr=p.addr and s.sid in (?);
果然抓取全是相同的sql语句
(3)询问开发人员,找到该查询语句
(4)疲敝该sql语句
(5)分析sql语句,该sql语句已经是最优化,导致该次故障的主要原因是首页告警查询是每隔6分钟执行一次(告警信息表500万数据,并在不断增加),当用户达到一定数量以后,导致buffer waits
(6)从业务上改造:用一个中间表存最新的告警数据(最多1万条数据),马上组织项目组人员讨论方案,分配任务!
(7)2009-08-06号改造完成,上线加载,测试无问题!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7743814/viewspace-611654/ ,如需转载,请注明出处,否则将追究法律责任。