如何收集Oracle DB SQL Monitor报告
使用条件
Oracle SQL Monitor 功能需要企业版许可证以及额外的诊断与调优选件(Diagnostics and Tuning Pack)授权。
SQL 监控需要满足以下条件:
1、拥有诊断与调优选件(Diagnostics and Tuning Pack)许可证。
2、将 STATISTICS_LEVEL 参数设置为 'TYPICAL' 或 'ALL'。
3、将 CONTROL_MANAGEMENT_PACK_ACCESS 参数设置为 'DIAGNOSTIC+TUNING'。
默认情况下,当满足以下任一条件时,SQL 语句将被监控:
1、操作以并行方式运行。
2、操作在单次执行中至少消耗了 5 秒的 CPU 或 I/O 时间。
3、通过 /*+ MONITOR */ 提示强制对操作进行跟踪。
默认情况下,SQL 监控器仅监控 300 行或更少的执行计划。可通过参数_SQLMON_MAX_PLANLINES
增加此限制(MOS :1613163.1)。你还可以使用参数_SQLMON_THRESHOLD
更改默认的 5 秒运行时间阈值。
ALTER SYSTEM SET "_sqlmon_max_planlines"=1000 SCOPE=MEMORY;
获取sqlmonitor的方法
1、通过EM获取
可以通过企业管理器云控制(Enterprise Manager Cloud Control)或企业管理器数据库 express 版(EM Express),在性能中心(通过 “性能” 菜单进入)的 “已监控 SQL” 选项卡中,直接访问活动 SQL 监视器报告。
下面是12C的示例,如果你的网络里有统一管理的EM也可以查看。
像我们这种客户的小环境没有统一管理的EM,数据库也没有开启EM就不太适用。
2、通过Sqldeveloper图形工具获取
工具虽然是免费的,但是前提你要有相应的授权。
可以通过sqldeveloper 管理工具–优化–实时SQL监视,选中要生成报告的SQL,点保存按钮就可以直接保存到本地
其中active report需要联网加载插件才能查看,当然显示的也比较全面。
3、通过脚本
11G版本
set trimspool on
set arraysize 512
set trim on
set pagesize 0
set linesize 1000
set long 1000000
set longchunksize 1000000
spool sqlmon.html
select dbms_sqltune.report_sql_monitor (sql_id=>'输入你的SQLID', report_level=>'ALL', type=>'ACTIVE') from dual;
spool off
type对应有三个选项
ACTIVE 是一种 HTML 的交互页面,可以点击标签页切换内容,需要查看报告的机器联网。
HTML 是个静态页面,不需要联网。
TEXT 则是纯文本表格样式。
19C版本更换了DBMS包
SET LONG 1000000
SET LONGCHUNKSIZE 1000000
SET LINESIZE 32767
SET PAGESIZE 0
SET ECHO OFF
SET FEEDBACK OFFSELECT DBMS_SQL_MONITOR.REPORT_SQL_MONITOR(sql_id => '输入你的SQLID',type => 'TEXT',report_level => 'ALL'
) AS report
FROM DUAL;
ACTIVE报告示例