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))

)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值