Oracle
如何找出為什麼這個查詢處於等待狀態?
我有一個查詢已經等待了幾分鐘並且根本沒有執行。
在 SQL Developer 監控會話視圖中,它顯示查詢已等待 667 秒?
如何找出此查詢處於等待狀態的原因?
是什麼讓您認為您的會話正在等待?
當一個語句使用 CPU 時,它不是在等待。沒有等待事件說明使用 CPU 進行處理。人們常常忘記這一點。您的會話很可能正在使用 CPU。您的輸出中沒有任何跡象表明您的會話正在等待。
SECONDS_IN_WAIT
如果會話目前正在等待,則該值是等待目前等待的時間量。如果會話未處於等待狀態, 則該值是自上次等待開始以來的時間量。
你也應該查詢
WAIT_TIME
:等待時間
如果會話目前正在等待,則值為 0。 …
另一種確認您的會話的方法
ON CPU
是查詢 ASH。在 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>
看一下“事件”欄位。