我试图分析为一个持续时间为一个小时的特定进程生成的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 ordered by Elapsed Time中看到SQL Text。
我的问题是:这是识别昂贵查询的正确方法吗?请在这方面提供建议。
Elapsed Time (s) SQL Text
19,477.05 select abc.....
7,644.04 select def...发布于 2014-06-11 18:38:02
SQL Ordered by Elapsed Time,包括在processing.We期间花费大量执行时间的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
发布于 2014-06-11 23:08:56
AWR用于查看数据库运行状况。因此,我认为这不是跟踪流程的好工具。
您应该使用其他工具,如sql_trace (带tkprof)或dbms_profiler。它会在你自己的进程上串连。如果您使用的是sql_trace,则需要连接到服务器(或请求到数据库)来分析跟踪。
发布于 2019-01-28 14:10:06
在按运行时间排序的SQL中,您总是需要检查执行次数较少、运行时间较长的查询。这将始终是有问题的查询。由于运行时间是为各个查询定义的任务,在本例中,如果执行次数越少,运行时间越高,这意味着由于某些原因,查询的执行没有达到预期。
https://stackoverflow.com/questions/24136907
复制相似问题