如何在Oracle中显示SQL执行进度和执行计划?

问题:

您想查看Oracle SQL在SQL执行计划中花费时间的位置。

使用Oracle 11g版本,我们可以在SQL运行时查看SQL执行计划的进度。“ V $SQL_PLAN_MONITOR”视图为SQL语句的执行计划的每个步骤包含一行。SQL下面将帮助您查看执行计划以及进度。

“ V $SQL_PLAN_MONITOR”为您提供有关使用资源最多的步骤的信息,“ V $SQL_PLAN_MONITOR”中的统计信息每秒更新一次。

通过使用DBMS_SQLTUNE包的REPORT_SQL_MONITOR函数,我们还可以在执行计划内生成查询进度的实时文本,HTML甚至XML报告。

示例

select
  a.sid
 ,a.status
 ,to_char(a.sql_exec_start,'yymmdd hh24:mi') start_time
 ,a.plan_line_id
 ,a.plan_operation
 ,a.plan_options
 ,a.output_rows
 ,a.workarea_mem     mem_bytes
 ,a.workarea_tempseg temp_bytes
from v$sql_plan_monitor a
    ,v$sql_monitor      b
where a.status NOT LIKE '%DONE%'
and   a.key = b.key
order by a.sid, a.sql_exec_start, a.plan_line_id;

生成HTML报告。

示例

SET LINES 3000 PAGES 0 LONG 1000000 TRIMSPOOL ON
SPOOL report.html
select dbms_sqltune.report_sql_monitor(session_id=> 901,
  event_detail => 'YES' ,report_level => 'ALL' ,type => 'HTML'
  )
from dual;
SPOOL OFF;