如何识别 Oracle 数据库中的最新 WAIT 事件?


问题

您希望了解数据库中最近的重要等待事件,以及对这些等待事件负责的最多的用户、SQL 语句和对象。

解决方案

Oracle 为我们提供了 V$ACTIVE_SESSION_HISTORY,以获取有关最常见等待事件、SQL 语句、数据库对象和对这些等待事件负责的用户的信息。

用于查找等待事件的 SQL

示例

SELECT event,   SUM(wait_time + time_waited) total_wait_time FROM v$active_session_history GROUP BY event ORDER BY total_wait_time DESC;

若要找出经历了最多等待事件的用户,我们可以使用以下 SQL。

示例

SELECT s.sid,   s.username,   SUM(a.wait_time + a.time_waited) total_wait_time FROM v$active_session_history a,   v$session s WHERE a.session_id=s.sid GROUP BY s.sid,   s.username ORDER BY total_wait_time DESC;

若要找出等待时间最长的对象,我们可以使用以下 SQL。

示例

SELECT a.current_obj#,   d.object_name,   d.object_type,   a.event,   SUM(a.wait_time + a.time_waited) total_wait_time FROM v$active_session_history a,   dba_objects d WHERE a.current_obj# = d.object_id GROUP BY a.current_obj#,   d.object_name,   d.object_type,   a.event ORDER BY total_wait_time;

最后,我们可以根据以下查询找出等待时间最长的 SQL 语句。

示例

SELECT a.user_id,   u.username,   s.sql_text,   SUM(a.wait_time + a.time_waited) total_wait_time FROM v$active_session_history a,   v$sqlarea s,   dba_users u WHERE  a.sql_id  = s.sql_id AND a.user_id = u.user_id GROUP BY a.user_id,   s.sql_text,   u.username;

更新于: 05-Dec-2020

8K+ 浏览量

开启你的职业生涯

完成课程即可获得认证

开始
广告