如何在Oracle中找到哪些查询占用了大部分CPU时间?

时间:2013-09-13 21:45:25

标签: oracle oracle10g

我们有一个包含大量数据的应用程序,大约有100个表,其中大多数都有大约800万到1000万行,突然间我们遇到了性能问题,并且发现Oracle服务器上的CPU使用率过高。

由于对oracle服务器的请求来自不同的应用程序,有没有办法在Oracle服务器中查找哪些查询需要更长时间或消耗大量CPU?

非常感谢您的回复或指示。

3 个答案:

答案 0 :(得分:3)

由于您被许可使用AWR并且您的DBA知道如何生成AWR报告,因此请让您的DBA在CPU使用率过高的时间段内生成AWR报告。在AWR报告中,将有许多不同的部分,其中一部分是按CPU使用情况排序的SQL语句。这将显示哪些SQL语句在相关时间段内使用的CPU最多。

答案 1 :(得分:1)

听起来你需要生成一些SQL跟踪文件并使用tkprof分析结果。

这里有一个很好的问问汤姆问题应该告诉你如何解决这个问题:http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:969160000346108326

答案 2 :(得分:1)

select elapsed_time/1000000 seconds, gv$sql.*
from gv$sql
order by elapsed_time desc;

它不提供与AWR等工具一样多的信息,并且查询会定期老化。但它运行起来非常快捷,而且需要较少的权限。