SQL Monitor 的应用场景主要针对可能存在性能瓶颈的 SQL 进行监控和分析,调用 dbms_sqltune.report_sql_monitor 可以获得相应 SQL 的 HTML 报告。
当 SQL 的执行时间超过 5 秒,会被 SQL Monitor 自动列为监控对象,并会被记录在 v$sql_monitor 视图中。当表开启并行查询时,也会被 SQL Monitor 记录。
SQL Monitor 的报告功能很容易上手。使用时有两种形式,一种是指定 SID,另一种是指定存在问题的 SQL_ID。我们可以通过查询 v$sql_monitor 视图,检查有哪些慢 SQL 被 SQL Monitor 列入监控。
col status for a15col username for a10col module for a12col program for a12col sql_id for a15col sql_text for a50set pagesize 0set linesize 200col sid for 999999select status, username, module,program, sid, sql_id, sql_textfrom v$sql_monitor;

通过 v$sql_monitor 记录的有问题的 SQL 的 SID 或 SQL_ID,可以通过调用 dbms_sqltune.report_sql_monitor 生成 HTML 的分析报告。
如下语句是对指定的 SQL_ID 进行分析:
set trimspool onset arraysize 512set trim onset pagesize 0set linesize 1000set long 1000000set longchunksize 1000000spool active_sqlmon.htmlselect dbms_sqltune.report_sql_monitor(sql_id => '1cg9h05uqz1sn' ,report_level=>'ALL',type=>'ACTIVE')from dual;spool off
在指定目录开启 http 服务,就可以通过 http://server-ip 在线查询生成的 HTML 报告:
# python2python -m SimpleHTTPServer 80# python3python -m http.server 80

另一种方式是使用 SID,当可以定位到会话时,可以使用会话ID来分析有问题的SQL,dbms_sqltune.report_sql_monitor 的用法如下:
select /*+ noparallel */ dbms_sqltune.report_sql_monitor (session_id=>8651,report_level=>'ALL',type=>'ACTIVE')from dual;
SQL Monitor 生成的报告类型有多种样式,其中用的多的有 ACTIVE、HTML、TEXT。上面我们用过的 ACTIVE 是一种 HTML 的交互页面,可以点击标签页切换内容。另一种样式 HTML 是个静态页面,TEXT 则是纯文本表格样式。
HTML 样式:
select /*+ noparallel */ dbms_sqltune.report_sql_monitor (session_id=>8651,report_level=>'ALL',type=>'HTML')from dual;

TEXT 样式:
select /*+ noparallel */ dbms_sqltune.report_sql_monitor (session_id=>8651,report_level=>'ALL',type=>'TEXT')from dual;

SQL Monitor 的监控功能默认会自动开启,默认的参数文件配置为:
SQL> show parameter control_management_pack_accesscontrol_management_pack_access string DIAGNOSTIC+TUNINGSQL> show parameter statistics_levelstatistics_level string TYPICAL
参考:
https://docs.oracle.com/cd/E11882_01/server.112/e41573/instance_tune.htm#PFGRF94546
全文完。
如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。




