我试图分析为特定进程生成的AWR
报告,持续时间为一小时。我试图找出哪个查询需要花费很多时间
在运行过程中。
当我完成报告后,我可以看到SQL ordered by Gets
,SQL ordered by CPU Time
,SQL ordered by Executions
,SQL ordered by Parse Calls
,
SQL ordered by Sharable Memory
,SQL ordered by Elapsed Time
等。
我可以在表SQL Text
中看到SQL ordered by Elapsed Time
。
我的问题:这是识别昂贵查询的正确方法吗?请就此提出建议。
Elapsed Time (s) SQL Text
19,477.05 select abc.....
7,644.04 select def...
答案 0 :(得分:1)
SQL Ordered by Elapsed Time
包括在处理过程中占用大量执行时间的SQL语句。我们必须查看Executions
,Elapsed time per Exec (s)
等以及Elapsed time
进行分析。
例如,查询具有较低的Executions
和较高的Elapsed time per Exec (s)
,此查询可能是进行故障排除或优化的候选对象。
到目前为止我找到的最佳参考资料:http://www.dbas-oracle.com/2013/05/10-steps-to-analyze-awr-report-in-oracle.html
答案 1 :(得分:0)
AWR用于查看数据库运行状况。所以,我认为这不是追踪流程的好工具。
您应该使用其他工具,例如sql_trace(使用tkprof)或dbms_profiler。它会集中在你自己的过程中。 如果您使用的是sql_trace,则需要连接到服务器(或询问dba tem)以分析跟踪。
答案 2 :(得分:0)
在按经过时间排序的SQL中,您始终需要检查执行次数较低和经过时间较高的查询。这将始终是有问题的Query。由于“经过时间”是相应查询的已定义任务,在这种情况下,如果“执行时间”较长而执行次数较少,则意味着该查询由于某种原因而无法达到预期的效果。