oracle sql execute elapsed time,sql duration 和 elapsed_time 的区别
今天在處理一個(gè)long run sql的時(shí)候發(fā)現(xiàn)了這個(gè)問(wèn)題,sql duration和elapsed_time的區(qū)別貌似有時(shí)候非常大.
oracle doc上關(guān)于 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(當(dāng)前時(shí)間或者sql執(zhí)行結(jié)束時(shí)間 - sql_exec_start) 應(yīng)該會(huì)和elapsed_time大體上一致。但是在做了一個(gè)查詢之后發(fā)現(xiàn)兩者區(qū)別有時(shí)候很大,請(qǐng)問(wèn)一條sql語(yǔ)句中間執(zhí)行會(huì)暫停下來(lái)嗎(當(dāng)然不是指cpu wait, I/O wait之類(lèi)已經(jīng)包含在elapsed_time內(nèi)的那種等待)?如果有可能那么可能是什么原因呢,或者該如何解釋duration遠(yuǎn)大于elapsed_time?謝謝大家!
環(huán)境是dataware house 11.2.0.3.0 非RAC, table是一個(gè)比較大的fact table。
(這下面的查詢雖然我用的是sysdate-sql_exec_start,不過(guò)這條查詢是剛剛結(jié)束的,OEM的sql monitor顯示的duration是2:38:08,請(qǐng)無(wú)須深究這一點(diǎn))
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))
)
總結(jié)
以上是生活随笔為你收集整理的oracle sql execute elapsed time,sql duration 和 elapsed_time 的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CAS单点登出,调整CAS源码,实现前后
- 下一篇: 通过commons-email-1.5简