如何确定 Oracle 中等待时间最长的 SQL 查询?
问题
您希望识别出导致数据库中等待时间最长的 SQL 语句。
解决方案
我们可以使用以下 SQL 语句来识别出导致问题的 SQL。以下查询将对过去 30 分钟内运行的 SQL 语句进行排名,并根据每个查询的总等待时间显示它们。
示例
SELECT ash.user_id, u.username, s.sql_text, SUM(ash.wait_time + ash.time_waited) ttl_wait_time FROM v$active_session_history ash, v$sqlarea s, dba_users u WHERE ash.sample_time BETWEEN sysdate - 60/2880 AND sysdate AND ash.sql_id = s.sql_id AND ash.user_id = u.user_id GROUP BY ash.user_id, s.sql_text, u.username ORDER BY ttl_wait_time ;
当您遇到性能问题时,我们建议您验证哪些 SQL 语句的等待时间最长。要找到等待时间最长的查询,您必须对 "V$ACTIVE_SESSION_HISTORY" 视图的 wait_time 和 time_waited 列中针对特定 SQL 语句的值求和。为此,您必须使用 SQL_ID 作为连接列将 V$SQLAREA 视图与 "V$ACTIVE_SESSION_HISTORY" 视图连接起来。
广告