如何确定 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" 视图连接起来。

更新于: 2020-12-05

2K+ 浏览

启动你的职业

通过完成课程获得认证

开始
广告