如何在Oracle中显示SQL执行进度和执行计划?
问题:
您想查看OracleSQL在SQL执行计划中花费时间的位置。
解
使用Oracle11g版本,我们可以在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;