【问题标题】:Check status sql query or percentage检查状态 sql 查询或百分比
【发布时间】:2012-02-18 19:39:38
【问题描述】:

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

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

【问题讨论】:

    标签: sql oracle oracle-sqldeveloper


    【解决方案1】:

    你可以检查 gv$session_longops where time_remaining>0;

    从 gv$session_longops 中选择 sid,target_desc,(Sofar*100)/totalwork as percent_complete

    会给你百分比。

    【讨论】:

      【解决方案2】:

      如果您的查询不在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
      

      【讨论】:

        【解决方案3】:

        由于 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/…
        • 我说的是跟踪在存储过程中执行的一组 SQL 语句 - OP 不清楚她希望跟踪的是一个语句还是一个组 - 她只是说“a在数据库中工作” - 我不建议使用 longops 来跟踪您的业务逻辑,最好有一个您自己管理的持久存储,这样您就可以回去查看。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 2021-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多