暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle SQL剩余时间

askTom 2017-07-12
521

问题描述

嗨,汤姆,

我使用v $ session_longops来估计长时间运行的sql上剩余的时间。我最近注意到v $ session_longops中没有显示运行超过2个小时的sql,我看到的唯一等待事件是DB文件顺序读取。我试图在v $ session中环顾四周,看看视图中是否有一列可以给我估计剩余时间,但我只看到了过去的时间 (除非我错过了什么)。是否有一个sql/公式,我可以用来计算查询的剩余时间,而不是在longops中,而是运行一个多小时左右?

这是我的longops脚本:
SELECT s.inst_id,
       s.sid,
       s.serial#,
       sl.qcsid,
       s.username,
       s.module,
       sl.opname,
       sl.time_remaining/60 time_remaining
FROM   gv$session s,
       gv$session_longops sl
WHERE  s.sid     = sl.sid
AND    s.inst_id = sl.inst_id
AND    s.serial# = sl.serial#
and sl.totalwork<>sl.sofar;
复制


我欣赏你的洞察力。

谢谢

专家解答

v $ session_longops仅显示有关计划中特定步骤的信息,例如全表扫描。所以如果你有这样的计划:

------------------------------------------
| Id  | Operation             | Name     |
------------------------------------------
|   0 | SELECT STATEMENT      |          |
|   1 |  HASH JOIN            |          |
|   2 |   HASH JOIN           |          |
|   3 |    TABLE ACCESS FULL  | CHANNELS |
|   4 |    PARTITION RANGE ALL|          |
|   5 |     TABLE ACCESS FULL | SALES    |
|   6 |   TABLE ACCESS FULL   | TIMES    |
------------------------------------------
复制


而且数据库当前正在读取通道,lonoops只会告诉您读取该表需要多长时间。它没有说明整个执行时间。

您仍然需要阅读销售和时间 (可能会显示为单独的longops)。然后将所有内容结合在一起完成查询。

需要多长时间?

'\ _(ツ)_/''

说真的。这是不可知的事情。即使您确切知道每个表中有多少行以及将返回多少联接,也无法确定还剩多长时间。有太多其他变量会影响运行时间,例如:

-您是否必须从磁盘或内存中读取数据?
-你的硬件有多快?
-系统中还发生了什么?

如果您已获得诊断和调优许可,则可以查看SQL monitor报告。这将向您显示计划的哪个部分当前正在执行。这可以帮助你了解work余。但不是如何long这需要。

https://oracle-base.com/articles/11g/real-time-sql-monitoring-11gr1

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论