Oracle

如何找出為什麼這個查詢處於等待狀態?

  • March 16, 2022

我有一個查詢已經等待了幾分鐘並且根本沒有執行。

在 SQL Developer 監控會話視圖中,它顯示查詢已等待 667 秒?

在此處輸入圖像描述

如何找出此查詢處於等待狀態的原因?

是什麼讓您認為您的會話正在等待?

當一個語句使用 CPU 時,它不是在等待。沒有等待事件說明使用 CPU 進行處理。人們常常忘記這一點。您的會話很可能正在使用 CPU。您的輸出中沒有任何跡象表明您的會話正在等待。

V$會話

SECONDS_IN_WAIT

如果會話目前正在等待,則該值是等待目前等待的時間量。如果會話未處於等待狀態, 則該值是自上次等待開始以來的時間量

你也應該查詢WAIT_TIME

等待時間

如果會話目前正在等待,則值為 0。 …

另一種確認您的會話的方法ON CPU是查詢 ASH。

V$ACTIVE_SESSION_HISTORY

在 ASH 中,該SESSION_STATE列有 2 個不同的可能值:

會話狀態

會話狀態:

等待

開啟 CPU

另一種方法是查詢V$SESSTAT(加入V$STATNAME)檢查統計數據是否CPU time增加。

您可以執行任何 CPU-bound 查詢來測試這一點,例如下面的查詢只使用 CPU。啟動它,我們會看到SECONDS_IN_WAIT增加,而您的會話不是在等待,而是在使用 CPU。

with g as (select * from dual connect by level <= 1000)
select count(*) from g,g,g,g;

可以查詢動態性能視圖V$SESSION_WAIT

如下所示:

select sid, seq#, EVENT,  WAIT_CLASS,  SECONDS_IN_WAIT from v$session_wait where sid=<SESSION_SID>

看一下“事件”欄位。

引用自:https://dba.stackexchange.com/questions/140433