前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle SQL调优系列之SQL Monitor Report

Oracle SQL调优系列之SQL Monitor Report

作者头像
烂猪皮
发布2020-11-25 17:41:18
8910
发布2020-11-25 17:41:18
举报
文章被收录于专栏:JAVA烂猪皮

1、SQL Monitor简介

sql monitor是oracle官方提供的自动监控符合特定条件的SQL,用于收集执行时的细节信息的监控工具,常用于sql调优和系统性能监控

2、捕捉sql的前提

sql monitor 捕捉sql的前提:

  • 并行执行的sql语句
  • 单次执行消耗的CPU或IO超过5秒
  • statistics_level级别必须是TYPICAL 或者ALL
  • 使用/* +MONITOR*/ HINT的SQL语句

3、SQL Monitor 参数设置

  • STATISTICS_LEVEL必须设置为:'TYPICAL'(缺省)或者 'ALL'
  • CONTROL_MANAGEMENT_PACK_ACCESS设置为:'DIAGNOSTIC+TUNING'

查看statistics_level参数

代码语言:javascript
复制
show parameter statistics_level;

建议还是改变Session就可以

代码语言:javascript
复制
alter session set statistics_level=ALL;

查看参数CONTROL_MANAGEMENT_PACK_ACCESS

代码语言:javascript
复制
show parameter CONTROL_MANAGEMENT_PACK_ACCESS;

4、SQL Monitor Report

本博客采用DBMS_SQLTUNE包DBMS_SQLTUNE.report_sql_monitor的方式获取,报告格式有:'TEXT','HTML','XML' ,'ACTIVE',其中'ACTIVE'只在11g R2以后才支持

4.1、SQL_ID获取

sql monitor使用,必须在sql中使用/* +MONITOR*/ Hint,然后数据会存在v$sql_monitor表里

随意找条sql,注意要加/*+ moniotr*/

代码语言:javascript
复制
select /*+ moniotr*/ a.user_code, a.full_name, a.user_pwd, c.unit_code, c.unit_name
  from base_user a
  left join (select ur.user_code, ur.unit_code
               from t_user_role ur
              where ur.user_role < 10) b
    on a.user_code = b.user_code
  left join t_unit_info c
    on b.unit_code = c.unit_code
 where c.unit_code in
       (select uinfo.unit_code
          from t_unit_info uinfo
         start with uinfo.unit_code = '15803'
        connect by prior uinfo.unit_code = uinfo.para_unit_code);

提供sql查询,获取sql_id

代码语言:javascript
复制
select sql_id,sql_text from v$sql_monitor where sql_text like '%t_unit_info%
4.2、Text文本格式

将上面查询到的sql_id改下,然后执行如下SQL:

代码语言:javascript
复制
SET LONG 1000000
SET LONGCHUNKSIZE 1000000
SET LINESIZE 1000
SET PAGESIZE 0
SET TRIM ON
SET TRIMSPOOL ON
SET ECHO OFF
SET FEEDBACK OFF
spool report_sql_monitor_text.txt
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
  SQL_ID => 'g9rtj389t0g66',
  TYPE => 'TEXT',
  REPORT_LEVEL => 'ALL') AS REPORT
FROM dual;
spool off

获取到text格式的sql monitor

4.3、Html格式
代码语言:javascript
复制
SET LONG 1000000
SET LONGCHUNKSIZE 1000000
SET LINESIZE 1000
SET PAGESIZE 0
SET TRIM ON
SET TRIMSPOOL ON
SET ECHO OFF
SET FEEDBACK OFF
spool report_sql_monitor_html.html
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
  SQL_ID => 'g9rtj389t0g66',
  TYPE => 'HTML',
  REPORT_LEVEL => 'ALL') AS REPORT
FROM dual;
spool off

获取到对应报告,可以看到执行计划、Buffer Gets 等等信息

4.4、ACTIVE格式

ACTIVE格式需要下载相应的flash组件、脚本,

代码语言:javascript
复制
SET LONG 1000000
SET LONGCHUNKSIZE 1000000
SET LINESIZE 1000
SET PAGESIZE 0
SET TRIM ON
SET TRIMSPOOL ON
SET ECHO OFF
SET FEEDBACK OFF
spool report_sql_monitor_active.html
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
  SQL_ID => '2rjh5d5k2yujz',
  TYPE => 'ACTIVE',
  REPORT_LEVEL => 'ALL',
  BASE_PATH => 'http://ip/script') AS REPORT
FROM dual;
spool off
4.5 SQL Monitoring list

如果要获取所有sql monitor,就可以使用如下SQL:

代码语言:javascript
复制
SET LONG 1000000
SET LONGCHUNKSIZE 1000000
SET LINESIZE 1000
SET PAGESIZE 0
SET TRIM ON
SET TRIMSPOOL ON
SET ECHO OFF
SET FEEDBACK OFF
SPOOL report_sql_monitor_list.html
SELECT dbms_sqltune.report_sql_monitor_list(
  type         => 'HTML',
  report_level => 'ALL') AS report
FROM dual;
SPOOL OFF

5、SQL Monitor Report查询

提供sql monitor常用的查询脚本

5.1、查看所有的sql monitor report
  • 查看所有的sql monitor report
代码语言:javascript
复制
   select dbms_sqltune.report_sql_monitor from dual;
5.2、查看某个sql的sql monitor report
  • 查看某个sql的sql monitor report
代码语言:javascript
复制
  SELECT DBMS_SQLTUNE.report_sql_monitor(sql_id => '2rjh5d5k2yujz', type => 'TEXT') from dual;
5.3、查看某个sql的整体性能
  • 查看某个sql的整体性能
代码语言:javascript
复制
   SELECT DBMS_SQLTUNE.report_sql_monitor_list(sql_id=>'2rjh5d5k2yujz',type =>'TEXT',report_level => 'ALL') AS report FROM dual;
5.4、查看整个系统的性能
  • 查看整个系统的性能
代码语言:javascript
复制
   SELECT DBMS_SQLTUNE.report_sql_monitor_list(type =>'TEXT',report_level => 'ALL') AS report FROM dual;
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA烂猪皮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2、捕捉sql的前提
  • 3、SQL Monitor 参数设置
  • 4、SQL Monitor Report
    • 4.1、SQL_ID获取
      • 4.2、Text文本格式
        • 4.3、Html格式
          • 4.4、ACTIVE格式
            • 4.5 SQL Monitoring list
            • 5、SQL Monitor Report查询
              • 5.1、查看所有的sql monitor report
                • 5.2、查看某个sql的sql monitor report
                  • 5.3、查看某个sql的整体性能
                    • 5.4、查看整个系统的性能
                    相关产品与服务
                    应用性能监控
                    应用性能监控(Application Performance Management,APM)是一款应用性能管理平台,基于实时多语言应用探针全量采集技术,为您提供分布式性能分析和故障自检能力。APM 协助您在复杂的业务系统里快速定位性能问题,降低 MTTR(平均故障恢复时间),实时了解并追踪应用性能,提升用户体验。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档