问题描述:
开发人员报告系统运行缓慢,影响用户访问.
1.登陆数据库主机
使用vmstat检查,发现CPU资源已经耗尽,大量任务位于运行队列:
2.使用Top命令
观察进程CPU耗用,发现没有明显过高CPU使用的进程
$ top
|
3.检查进程数量
|
发现系统存在大量Oracle进程,大约在300左右,而正常情况下Oracle连接数应该在100左右.
4.检查数据库
查询v$session_wait获取各进程等待事件
|
发现存在大量db file scattered read及db file sequential read等待.
5.捕获相关SQL
这里用到了我的以下脚本getsqlbysid.sql:
|
|
对几个全表扫描进程跟踪以后,得到以上SQL语句.
以上语句如果良好编码应该使用绑定变量.但是现在这个不是我们关心的.
使用该应用用户连接,检查其执行计划:
|
该表这里有22万记录,全表扫描已经不再适合.
检查该表,存在以下索引:
|
6.决定创建新的索引以消除全表扫描
|
7.观察系统状况
原大量等待消失
|
持续观察的CPU使用情况
|
至此,此问题得以解决.
作者:eygle |English Version 【版权声明:转载时请务必以超链接形式标明文章原始出处和作者信息及本声明】
链接:http://www.eygle.com/archives/2004/10/howto_capture_problem_sql.html
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-997114/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/35489/viewspace-997114/
本文针对系统运行缓慢的问题进行排查,发现Oracle进程过多导致CPU资源耗尽。通过检查发现大量全表扫描操作,最终通过优化SQL语句并创建新索引来解决性能瓶颈。

被折叠的 条评论
为什么被折叠?



