使用hint主动监视SQL
SELECT /*+MONITOR+*/ T.ID, T1.ID FROM TESTTBL T INNER JOIN TESTTBL T1 ON (1 = 1);
生成SQL-MONITOR报告脚本
通过查看SQL-MONITOR视图,构造生成慢SQL的SQL-MONITOR报告。脚本示例:
/** 1.替换以下内容: SQLPLUS SYS/oracle@ORCL as sysdba 2.拷贝查询结果SQLMON_REPORT列脚本,粘贴到DOS窗口下运行 3.查看D盘目录下的SQL-MONITOR.html报告 **/ SELECT * FROM (SELECT SA.SQL_ID, SA.SQL_TEXT, SA.SQL_FULLTEXT, 'SQLPLUS SYS/oracle@ORCL as sysdba ' || CHR(13) || CHR(10) || 'SET TRIM ON ' || CHR(13) || CHR(10) || 'SET trimspool ON ' || CHR(13) || CHR(10) || 'SET arraysize 512 ' || CHR(13) || CHR(10) || 'SET pagesize 0 ' || CHR(13) || CHR(10) || 'SET linesize 1000 ' || CHR(13) || CHR(10) || 'SET long 1000000 ' || CHR(13) || CHR(10) || 'SET longchunksize 1000000 ' || CHR(13) || CHR(10) || 'SPOOL D:\慢SQL_sqlmon_' || SA.SQL_ID || '_ACTIVE.html ' || CHR(13) || CHR(10) || '--type:[TEXT,HTML,ACTIVE] ' || CHR(13) || CHR(10) || 'SELECT DBMS_SQLTUNE.report_sql_monitor(sql_id => ''' || SA.SQL_ID || ''',report_level => ''ALL'',type => ''ACTIVE'') AS SQLMON_REPORT FROM DUAL; ' || CHR(13) || CHR(10) || 'SPOOL OFF; ' || CHR(13) || CHR(10) || 'SPOOL D:\慢SQL_sqlmon_' || SA.SQL_ID || '_HTML.html ' || CHR(13) || CHR(10) || '--type:[TEXT,HTML,ACTIVE] ' || CHR(13) || CHR(10) || 'SELECT DBMS_SQLTUNE.report_sql_monitor(sql_id => ''' || SA.SQL_ID || ''',report_level => ''ALL'',type => ''HTML'') AS SQLMON_REPORT FROM DUAL; ' || CHR(13) || CHR(10) || 'SPOOL OFF; ' || CHR(13) || CHR(10) || 'EXIT; ' || CHR(13) || CHR(10) AS SQLMON_REPORT, SA.EXECUTIONS "执行次数", ROUND(SA.ELAPSED_TIME / 1000000, 2) "总执行时间(s)", ROUND(SA.ELAPSED_TIME / 1000000 / SA.EXECUTIONS, 2) "平均执行时间(s)", ROWS_PROCESSED "处理数据量", ROWS_PROCESSED / EXECUTIONS "平均处理数据量", BUFFER_GETS "逻辑读", BUFFER_GETS / EXECUTIONS "Gets/Exec", DISK_READS "物理读", DISK_READS / EXECUTIONS "Reads/Exec", SA.COMMAND_TYPE, SA.PARSING_USER_ID "用户ID", U.USERNAME "用户名", SA.HASH_VALUE, SA.ADDRESS FROM V$SQLAREA SA LEFT JOIN ALL_USERS U ON SA.PARSING_USER_ID = U.USER_ID WHERE EXISTS (SELECT 1 FROM V$SQL_MONITOR SM WHERE SM.SQL_ID = SA.SQL_ID) ORDER BY (SA.ELAPSED_TIME / SA.EXECUTIONS) DESC);
生成SQL-MONITOR报告

