2011-06-27 39 views
3

我有查詢需要花費大量的時間來執行(不同的操作)。但是該查詢未在v $ session_longops中列出。我如何強制將查詢放入v $ session_longops。

回答

4

不幸的是,如果你在談論一個SQL查詢,你可能無法迫使它在V$SESSION_LONGOPS展現出來。當一步驟需要6秒以上時,Oracle向V$SESSION_LONGOPS寫入查詢。但是,您可以有一個非常長時間的查詢,它由許多非常短的步驟組成。例如,內部和外部查詢使用索引來獲取數據的嵌套循環連接可以運行很長時間,但單個操作的時間可能不會超過一小部分。如果是這種情況,通常將優化器的估計基數與實際基數進行比較。 Oracle很可能會執行大量的短操作,因爲它低估了操作各個步驟的基數。對優化器進行更好的估計可能會導致更有效的查詢計劃和在V$SESSION_LONGOPS中跟蹤更長的操作。

如果你是在談論一個PL/SQL過程發生在發出一個或多個SQL查詢,Rajesh的評論是即期。您可以使用DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS methodV$SESSION_LONGOPS中跟蹤PL/SQL進程的進度。