查找Oracle数据库中占用最多CPU的SQL

根据操作系统进程查找Oracle数据库中占用最多CPU的SQL

问题:

最近在对数据库切换时发现应用切换到新布署的服务器上cpu占用百分百,使用以下方法找到问题原因。

操作:

1,使用Linux系统top命令查出占用cpu最高的进程

2,在sqlplus中执行如下sql:


SELECT
sql_text
FROM v$sqltext a
WHERE (a.hash_value, a.address) IN
(SELECT DECODE(sql_hash_value, 0, prev_hash_value, sql_hash_value),
DECODE(sql_hash_value, 0, prev_sql_addr, sql_address)
FROM v$session b
WHERE b.paddr =
(SELECT addr FROM v$process c WHERE c.spid = '&pid'))
ORDER BY piece ASC

其中&pid 是使用top 查看系统中进程占用CPU极高的PID
找到SQL语句进行相应的调整优化

3,分析找到的sql语句,如查看sql执行计划。

总结:

这里的问题是查询的where 条件字段没有在索引里面,导致查询慢。经过重建并增加相关字段到索引解决,但有点疑惑的是原来库上查询语句里where条件字段也没有在索引里面(新库是使用expdp导出再导入到新库的),查询还正常,CPU也不高,oracle数据库真是博大精深,好多问题还有待研究。

附:一般cpu占用效高都是排序、sql解析和全表扫描。

======================================================================================

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任! 谢谢合作!

QQ: 164798858@qq.com
Sina: weibo.com/kaijunfeng
Yahoo: fffygapl@yahoo.com.cn

阅读更多
个人分类: Other-issue
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭