Real-Time SQL Monitoring详解

在Oracle Database 11g中,系统自动监控符合以下条件的SQL,并收集执行时的细节信息:采用并行方式执行,或者单次执行消耗的CPU或者IO超过5秒。SQL Monitoring功能的启动需要以下初始化参数:
— STATISTICS_LEVEL设置为:'TYPICAL'(缺省)或者 'ALL'
— CONTROL_MANAGEMENT_PACK_ACCESS设置为:'DIAGNOSTIC+TUNING'
从V$SQL_MONITOR中可以查到被监控的SQL。如果需要SQL Monitoring手工监控某条SQL可以加上Hint:/*+ MONITOR */
SQL Monitoring可以采用以下3种方式展现:
— EM的:Performance —〉右下角的SQL Monitoring —〉Monitored SQL Executions
— SQL Developer的:Tools —〉Monitor SQL
— DBMS_SQLTUNE包
在处理一些复杂SQL的优化时,我们要根据CBO评估的ROWS以及执行计划中包括的真实ROWS的吻合程度判断一个执行计划的正确与否。在10g的时候,一般可以通过Hint gather_plan_statistics来实现,而在11g中利用SQL Monitor Report就能很方便的显示这部分信息。
新增了两个动态视图:V$SQL_MONITOR和V$SQL_PLAN_MONITOR。

DBMS_SQLTUNE. REPORT_SQL_MONITOR
此函数用于返回某条SQL的SQL Monitoring报告,需要执行的用户有SELECT_CATALOG_ROLE角色。常用的参数如下:
— SQL_ID
缺省为Null,取最后一条被监控的SQL:v$sql_monitor的last_refresh_time最大的SQL。
— SQL_EXEC_ID
同一条SQL多次被监控到时会在v$sql_monitor中产生多条记录,他们的SQL_EXEC_ID是不同的。此参数用于指定:对同一条SQL_ID的哪一个SQL_EXEC_ID出报告。
缺省为Null,取最后一次执行的SQL_EXEC_ID。
— REPORT_LEVEL
报告的详细程度。基本的参数值是:'NONE','BASIC','TYPICAL','ALL',但与DBMS_XPLAN类似,可以用“+”或者“-”来自定义报告中需要列出的内容。比如:'BASIC +PLAN +BINDS'或者'ALL -PLAN'。
— TYPE
产生报告的格式:'TEXT','HTML','XML' ,'ACTIVE'。
其中'ACTIVE'只在11g R2以后才支持,使用HTML和Flash的方式显示动态的报告,与在EM中看到的类似。但其在显示时需要从Oracle网站读取相关联的Javascript和Flash。
如果不能连到Internet又想看ACTIVE Report可以下载相关的库文件到本地的HTTP服务器上,然后用BASE_PATH来制定库文件的位置。
在本地HTTP服务器上创建目录,然后下载下面的文件:
mkdir -p /var/www/html/sqlmon
cd /var/www/html/sqlmon
wget --mirror --no-host-directories --cut-dirs=1 http://download.oracle.com/otn_software/emviewers/scripts/flashver.js
wget --mirror --no-host-directories --cut-dirs=1 http://download.oracle.com/otn_software/emviewers/scripts/loadswf.js
wget --mirror --no-host-directories --cut-dirs=1 http://download.oracle.com/otn_software/emviewers/scripts/document.js
wget --mirror --no-host-directories --cut-dirs=1 http://download.oracle.com/otn_software/emviewers/sqlmonitor/11/sqlmonitor.swf
在调用函数时加上参数,比如:base_path => 'http://192.168.0.4/sqlmon'
— SESSION_ID
指定某个SESSION_ID对应的SQL子集。如果要指定当前SESSION可以用:SYS_CONTEXT('USERENV','SID')。
实验:
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 e:\sql.html
SELECT dbms_sqltune.report_sql_monitor(sql_id       => 'b09ggu59qcupg',
                                   type         => 'HTML',
                                   report_level => 'ALL') AS report
FROM dual;
SPOOL OFF
产生的报告如下图:
 
bb
比较一下:TYPE='ACTIVE'产生的效果
SPOOL e:\sql.html
SELECT dbms_sqltune.report_sql_monitor(sql_id       => 'b09ggu59qcupg',
                                   type         => 'ACTIVE',
                                   report_level => 'ALL') AS report
FROM dual;
SPOOL OFF
bb 

DBMS_SQLTUNE. REPORT_SQL_MONITOR_LIST
需要Oracle 11g R2以上版本。此函数用于产生一个对监控SQL的汇总页,类似于EM中的“Monitored SQL Executions”。常用参数:TYPE和REPORT_LEVEL,用法与REPORT_SQL_MONITOR类似。
例如:
SELECT dbms_sqltune.report_sql_monitor_list(
  type         => 'HTML',
  report_level => 'ALL') AS report
FROM dual;

DBMS_SQLTUNE. REPORT_SQL_DETAIL
需要Oracle 11g R2以上版本。此函数用于根据各种条件参数(包括:start_time, end_time, duration, inst_id, dbid, event_detail, bucket_max_count, bucket_interval, top_n, duration_stats),产生比使用REPORT_SQL_MONITOR更加详细的SQL报告。
例如:
SELECT dbms_sqltune.report_sql_detail(top_n        => 5,
                                 TYPE         => 'html',
                                 report_level => 'ALL') AS report
FROM dual;
产生的报告包含更多的信息:
bb
 
备注:
在11.2.0.4中SQL Monitoring功能还是存在一些Bug,有些SQL在执行时会出现“LPX-00225: 结束元素标记 "sql" 与起始元素标记 "action" 不匹配”等异常。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4555/viewspace-1357412/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/4555/viewspace-1357412/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值