如何識別 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+ 瀏覽量

開啟你的職業生涯

完成課程即可獲得認證

開始
廣告