如何识别 Oracle 中等待时间最长的 SQL 查询?

oraclesoftware & codingprogramming

问题:

您想要识别数据库中导致等待时间最长的 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 语句等待时间最长。要找到等待时间最长的查询,您必须对特定 SQL 语句的"V$ACTIVE_SESSION_HISTORY"的 wait_time 和 time_waited 列中的值求和。为了做到这一点,您必须将 V$SQLAREA 视图与"V$ACTIVE_SESSION_HISTORY"视图连接起来,并使用 SQL_ID 作为连接列。


相关文章