- 最后登录
- 2013-9-19
- 在线时间
- 13 小时
- 威望
- 0
- 金钱
- 79
- 注册时间
- 2013-2-20
- 阅读权限
- 10
- 帖子
- 8
- 精华
- 0
- 积分
- 0
- UID
- 924
|
1#
发表于 2013-7-5 09:37:31
|
查看: 13705 |
回复: 6
今天在处理一个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))
) |
|