如何在 Oracle 中显示 SQL 执行进度以及执行计划?
问题
你想在 SQL 执行计划中查看 Oracle 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;