我们有一个包含大量数据的应用程序,大约 100 个表,其中大多数有大约 8-1000 万行,突然我们面临性能问题,发现 Oracle 服务器上的 CPU 使用率太高。
由于对 Oracle 服务器的请求来自不同的应用程序,有没有办法在 Oracle 服务器中找出哪些查询需要更长的时间或消耗大量的 CPU?
将不胜感激回复或任何指示以找出这一点。
由于您已获得使用 AWR 的许可,并且您的 DBA 知道如何生成 AWR 报告,因此请让您的 DBA 针对 CPU 使用率过高的时间段生成 AWR 报告。在 AWR 报告中,将有许多不同的部分,其中之一是按 CPU 使用率排序的 SQL 语句。这将显示在相关时间段内哪些 SQL 语句使用的 CPU 最多。
听起来您需要生成一些 SQL 跟踪文件并使用 tkprof 分析结果。
这里有一个很好的 Ask Tom 问题应该告诉你如何去做:http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID: 969160000346108326
select elapsed_time/1000000 seconds, gv$sql.*
from gv$sql
order by elapsed_time desc;
它提供的信息不如 AWR 等工具多,而且查询会定期过期。但它运行起来非常快速和容易,并且需要较少的权限。