oracle sql execute elapsed time,sql duration 和 elapsed_time 的区别
今天在處理一個long run sql的時候發現了這個問題,sql duration和elapsed_time的區別貌似有時候非常大.
oracle doc上關于 elaspsed_time :
ELAPSED_TIME NUMBER Elapsed time (in microseconds) used by this cursor for parsing, executing, and fetching
而sql_exec_start :
SQL_EXEC_START DATE Time when the execution started
按我的理解sql duration(當前時間或者sql執行結束時間 - sql_exec_start) 應該會和elapsed_time大體上一致。但是在做了一個查詢之后發現兩者區別有時候很大,請問一條sql語句中間執行會暫停下來嗎(當然不是指cpu wait, I/O wait之類已經包含在elapsed_time內的那種等待)?如果有可能那么可能是什么原因呢,或者該如何解釋duration遠大于elapsed_time?謝謝大家!
環境是dataware house 11.2.0.3.0 非RAC, table是一個比較大的fact table。
(這下面的查詢雖然我用的是sysdate-sql_exec_start,不過這條查詢是剛剛結束的,OEM的sql monitor顯示的duration是2:38:08,請無須深究這一點)
SQL> select sql_id,ELAPSED_TIME/1000000/3600 elapsed,(sysdate-sql_exec_start)*24 duration,status from v$sql_monitor where sql_id='18jj1716x09u4';
SQL_ID? ?? ?? ???ELAPSED? ?DURATION STATUS
------------- ---------- ---------- -------------------
18jj1716x09u4 .079098069 2.42805556 DONE (ALL ROWS)
SELECT??A.DOCUMENT_NO? ?? ???,
A.LINE_NO? ?? ?? ?? ?,
A.ORDER_TYPE_SRCCD? ?,
A.ORDER_COMPANY_SRCCD,
A.CUSTOMER_SHIPPED_ID
FROM? ? FACT_SALES_LINE A
WHERE? ?NOT EXISTS
(
SELECT 'X'
FROM? ? FACT_SALES_LINE_JDE_KEYS B
WHERE? ?A.DOCUMENT_NO? ?? ?? ?? ?? ?? ?? ?? ?? ?= B.DOCUMENT_NO
AND A.LINE_NO? ?? ?? ?? ?? ?? ?? ?? ?? ?= B.LINE_NO
AND ltrim(rtrim(A.ORDER_TYPE_SRCCD))? ? = Ltrim(rtrim(B.ORDER_TYPE_SRCCD))
AND ltrim(rtrim(A.ORDER_COMPANY_SRCCD)) = ltrim(rtrim(B.ORDER_COMPANY_SRCCD))
)
總結
以上是生活随笔為你收集整理的oracle sql execute elapsed time,sql duration 和 elapsed_time 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CAS单点登出,调整CAS源码,实现前后
- 下一篇: 通过commons-email-1.5简