1

是否有任何knows or think脚本或tool会告诉rough estimate执行查询需要多长时间”,就像我们将 Windows 中的文件复制到某个外部设备时,它给出了大致估计的时间,复制所需的时间. algorithm任何人都可以考虑根据解释计划创建任何内容吗?我不知道这是否是提出此类问题的正确论坛。但是这个问题出现在我的脑海中,所以我问了。

4

3 回答 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 回答