是否有任何knows or think
脚本或tool
会告诉rough estimate
“执行查询需要多长时间”,就像我们将 Windows 中的文件复制到某个外部设备时,它给出了大致估计的时间,复制所需的时间. algorithm
任何人都可以考虑根据解释计划创建任何内容吗?我不知道这是否是提出此类问题的正确论坛。但是这个问题出现在我的脑海中,所以我问了。
问问题
78 次
3 回答
3
查询计划的TIME
列已经为您提供了优化器对经过时间的估计
SQL> select *
2 from table( dbms_xplan.display );
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 14 | 546 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| EMP | 14 | 546 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
8 rows selected.
显然,优化器的估计肯定是不正确的。但这通常意味着对象的统计数据在某些方面是不正确的。假设您的算法将使用相同的统计数据,您的估计似乎不太可能更准确。
于 2012-12-11T16:45:31.363 回答
1
Oracle 有 v$session_longops 视图,可以估计某些查询的完成时间。Longops 包含以下信息:表扫描;索引快速全扫描;哈希连接;排序/合并;排序输出;回滚;收集表的索引统计信息。[但不是嵌套循环]
例如可以查询如下:
select to_char(sysdate,'DD-MON-YYYY hh24:MI:SS') date_measured
, sql_id
, elapsed
, remaining
, ROUND(sofar/totalwork*100, 2) progress_pct
, username
, sql_text
, inst_id, sid, serial#
, logon_time
, OSUSER
, terminal
, machine
, program
, last_call_et
from
(
SELECT s.inst_id
,s.sid
,s.serial#
,s.username
,s.OSUSER
,s.machine
,s.sql_id
,TRUNC(sl.elapsed_seconds/60) || ':' || MOD(sl.elapsed_seconds,60) elapsed
,TRUNC(sl.time_remaining/60) || ':' || MOD(sl.time_remaining,60) remaining
, sl.sofar
, sl.totalwork
,s.logon_time
,s.terminal
,s.program
,s.last_call_et
,sa.sql_text
FROM gv$session s
,gv$session_longops sl
,gv$sqlarea sa
WHERE s.inst_id = sl.inst_id
AND s.sid = sl.sid
AND s.serial# = sl.serial#
and s.sql_id = sa.sql_id
and s.inst_id = sa.inst_id
) a
where remaining not in ('0:0',':')
;
同样,longops 中没有所有查询,但它为满足其包含标准的长时间运行的查询提供了有趣的信息。
于 2012-12-12T12:40:14.543 回答
0
这其中有很多因素。
本文可能会让您深入了解您正在寻找的内容:ftp: //ftp.research.microsoft.com/users/autoadmin/progress.pdf
于 2012-12-11T16:45:37.840 回答