【发布时间】:2012-02-18 19:39:38
【问题描述】:
有谁知道是否有办法检查当前在数据库中运行的作业的状态或实际执行了多少 % 的状态。
我正在运行一项作业,但该作业需要很长时间,所以我想检查从查询中执行了多少 %。我在 Oracle sqldeveloper 中运行查询
【问题讨论】:
标签: sql oracle oracle-sqldeveloper
有谁知道是否有办法检查当前在数据库中运行的作业的状态或实际执行了多少 % 的状态。
我正在运行一项作业,但该作业需要很长时间,所以我想检查从查询中执行了多少 %。我在 Oracle sqldeveloper 中运行查询
【问题讨论】:
标签: sql oracle oracle-sqldeveloper
你可以检查 gv$session_longops where time_remaining>0;
从 gv$session_longops 中选择 sid,target_desc,(Sofar*100)/totalwork as percent_complete
会给你百分比。
【讨论】:
如果您的查询不在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
【讨论】:
由于 SQL 和数据库处理的基于集合的性质,您无法真正获得查询的“完成百分比”,因为 oracle 引擎并不确定。您可以尝试查看视图 v$session_longops 以了解您的部分 SQL 已经走了多远(此处可能会出现大型哈希连接或全表扫描)。查看this Ask Tom 了解更多信息。
如果您的工作有多个 SQL 语句,并且您试图跟踪每个语句之后的进度,您可以添加一些代码以在每个语句之后在控制表中插入状态更新。
【讨论】:
DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS 从您自己的代码中“挂钩”到 v$session_longops。 docs.oracle.com/cd/B28359_01/appdev.111/b28419/…