2012-01-25 82 views
3

有谁知道是否有方法检查数据库中当前正在运行的作业的状态或实际执行了多少%的状态。检查状态SQL查询或百分比

我正在运行一项工作,但工作需要很长时间,所以我想检查查询中执行了多少%。我在Oracle中运行查询sqldeveloper

回答

2

由于SQL和数据库处理的基于集合的本质,您不能真正得到查询的“%完成”,因为oracle引擎并不确定知道。您可以尝试查看v $ session_longops视图来查看SQL部分已经走了多远(大型散列连接或全表扫描可能会显示在此处)。请参阅this Ask Tom了解更多信息。

如果您的工作有多个SQL语句,并且您试图追踪每条语句后的距离,则可以添加一些代码以在每条语句之后在控制表上插入状态更新。

+0

than v $ session_longops工作完美 – Eve

+1

您不需要额外的“控制表”。您可以使用'DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS'从您自己的代码中“钩”到v $ session_longops中。 http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_appinf.htm#i996999 –

+0

我说的是跟踪一组在存储过程中执行的SQL语句 - OP是否清楚是否这是她希望跟踪的一个陈述或一个小组 - 她只是说“在数据库中工作” - 而且我不会建议使用longops来跟踪业务逻辑,更好地建立一个持久性商店来管理您自己,以便您可以回去看看。 –

0

如果您的查询不在v$session_longops中,则此查询中的output_rows列可能会有用。问题是你不知道总输出行是多少。

select plan_operation, plan_options, plan_object_name, plan_object_type, plan_bytes, plan_time, plan_cpu_cost, plan_io_cost, output_rows, workarea_mem 
from v$sql_plan_monitor 
where sid = 2646 
and status = 'EXECUTING' 
order by plan_line_id