2

我们有一个包含大量数据的应用程序,大约 100 个表,其中大多数有大约 8-1000 万行,突然我们面临性能问题,发现 Oracle 服务器上的 CPU 使用率太高。

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

将不胜感激回复或任何指示以找出这一点。

4

3 回答 3

3

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

于 2013-09-13T22:55:23.603 回答
1

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

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

于 2013-09-13T21:51:46.443 回答
1
select elapsed_time/1000000 seconds, gv$sql.*
from gv$sql
order by elapsed_time desc;

它提供的信息不如 AWR 等工具多,而且查询会定期过期。但它运行起来非常快速和容易,并且需要较少的权限。

于 2013-09-14T03:45:14.953 回答