SQL Monitor,你值得掌握的一个特性

    对于线上的SQL语句,看着执行计划cost还不错,但是实际执行的时候效果却有千壤之别,这是为什么呢?
    对于一个庞大的SQL语句,看着得到的执行计划却不知道瓶颈在哪里,SQL语句太复杂,但是执行计划更复杂,要读明白它掌握要领也不是一件容易的事情。
    碰到很多朋友问我,怎么去读一个执行计划,这个无论说的怎么细,似乎都不是很容易去理解,语言描述,纯文字描述和图形的效果还是有很大的差别。
    如果你在11g的版本中,SQL Monitor就是一个大大的福利,你值得掌握,如果你还没有好好掌握它,就实在太可惜了。
至于SQL Monitor更多的细节就不一一描述了,11g推出的这个特性其实和MySQL里的慢日志有些类似,MySQL里面的阈值要更低一些,SQL Monitor是5秒。一旦达到这个标准,就会进收集到v$sql_monitor这个视图中,可以得到详细的会话信息和执行计划。
    如果想单独定制,那么也不是一件难事。可以使用hint monitor来完成。比如这样的形式
select /*+ monitor */ count(*) from emp where  xxxxx
    如果确认不需要放入监控范围,也可以使用no_monitor来定制,比如这样的形式
select /*+ no_monitor */ count(*) from emp where  xxxxx
    查看生成的监控信息,可以使用如下的方式:
select dbms_sqltune.report_sql_monitor from dual;
    当然这些都是SQL Monitor常规的一些知识点,这些还不足以让我兴趣大开。我感兴趣的是它强大的UI展现能力。当然听起来这个似乎和这个特性好像关联不大,你看到效果就知道了。一个很复杂,抽象的事物如果用图形表示,要比文字丰富形象的多。
    得到SQL Monitor的报告,大体有以下几种格式。TEXT,HTML,ACTIVE三种
我们打一个比方。很多手机都会按照配置来冠以各种名号。

SQL Monitor的报告也是如此,TEXT格式是标准版,HTML是高配版,ACTIVE是尊享版
我们不来虚的,来实际看看效果。

文本格式的效果如下:

HTML格式的效果如下:
执行概览,会话信息,执行计划一目了然,非常贴心。

那么ACTIVE格式是什么意思呢,大体就是最炫,最全面的效果,还有一个小的flash效果。

有的朋友可能看到会说,这和HTML的效果有啥差别啊,有的,我再给一张图。
执行计划原来可以这么读。全表扫描,索引扫描,表连接信息都一目了然,越是复杂的执行计划这种方式越省事。

SQL文本和绑定变量的信息,点击SQL_ID就会弹出一个小窗口来。

好吧,看起来这么炫,想得到这个报告难不难呢,很简单就一个SQL语句就能搞定,绝对没有标题党的意思。
如果想写成shell脚本,也就是嵌入一个SQL语句即可。
tmp_sql_id=$1
sqlplus -s  / as sysdba<<eof
set pages 0
set long 99999999
set linesize 300
col comm format a200
set long 99999
SELECT dbms_sqltune.report_sql_monitor(
sql_id => '${tmp_sql_id}',
report_level => 'ALL',
type=>'TEXT',
base_path =>'http://www.jeanron100/sqlmon'
) comm
FROM dual;
EOF
唯一的差别就是在type的地方。TEXT,HTML的就设置为TEXT,HTML即可。如果是ACTIVE格式的,这个咱得稍说一些背景。
这个功能在Enterprise Manager中查看是很自然的一件事情,如果没有安装EM,我们不能因为这个专门去部署一个EM来不是。要达到同样的效果,就需要连接网络下载相应的格式,当然退一步来说,要做以下的一些辅助工作,还可以下载几个脚本到本地即可。
比如我们设置一个本地的目录结构,设置类似的站点http://www. jeanron100
就需要在本地创建一个jeanron100的目录
mkdir -p jeanron100/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
生成SQL语句的active报告语句如下:
SELECT dbms_sqltune.report_sql_monitor(
sql_id => '${tmp_sql_id}',
report_level => 'ALL',
type=>'ACTIVE',
base_path =>'http://www.jeanron100/sqlmon'
) comm
FROM dual;
把拷贝到的结果以HTML格式保存,在本地的目录下打开即可。其实感兴趣可以读一下里面的内容,里面大量使用了xml解析的方式。效果还是蛮不错的。值得推荐。
</eof

时间: 2024-12-29 23:26:15

SQL Monitor,你值得掌握的一个特性的相关文章

【SQL】Oracle SQL monitor

[SQL]Oracle SQL monitor 第一章 被埋没的SQL优化利器--Oracle SQL monitor DBAplus社群 | 2015-11-26 07:00 转载声明:本文为DBA+社群原创文章,转载必须连同本订阅号二维码全文转载,并注明作者名字及来源:DBA+社群(dbaplus). 据说,在Oracle企业版数据库中有一个免费的工具,乃SQL优化之利器,那就是Oracle SQL monitor.下面,由DBA+社群原创专家周俊,给大家科普一下这一被埋没的神器. 周俊 D

掌握SQL Monitor这些特性,SQL优化将如有神助!

SQL分析的苦与痛  对于线上的SQL语句,很多DBA都总会有一些疑问,看着执行计划cost还不错,但是实际执行的时候效果却有天壤之别,这是为什么呢?    对于一个庞大的SQL语句,看着得到的执行计划却不知道瓶颈在哪里,SQL语句太复杂,执行计划看起来更复杂,要读明白它掌握要领也不是一件容易的事情.   偶尔会有一些朋友问我,怎么去读一个执行计划,这个无论说得怎么细,似乎都不得要领,毕竟纯文字描述和图形的效果还是有很大的差别.      如果你在11g的版本中,SQL Monitor就是一个大

SQL Server误区:即时文件初始化特性可以在SQL Server中 a)开启 和 b)关闭

误区 #3: 即时文件初始化特性可以在SQL Server中 a)开启 和 b)关闭 a)是不允许的  b)是允许的 即时文件初始化是一个在SQL Server 2005以及之上的版本鲜为人知的特性.这个特性允许数据文件(仅仅是数据文件,不包括日志文件)初始化的过程跳过填0初始化过程.这种方式是在发生灾难时大大减少Downtime的好办法---在恢复数据库时由于免去了填0初始化的过程而直接开始恢复过程. 我之前已经写过关于即时文件初始化误区的文章了(见Misconceptions around

被埋没的SQL优化利器——Oracle SQL monitor

转载声明:本文为DBA+社群原创文章,转载必须连同本订阅号二维码全文转载,并注明作者名字及来源:DBA+社群(dbaplus).    据说,在Oracle企业版数据库中有一个免费的工具,乃SQL优化之利器,那就是Oracle SQL monitor.下面,由DBA+社群原创专家周俊,给大家科普一下这一被埋没的神器.   专家简介    周俊 DBA+社群原创专家   具有14年以上Oracle数据库技术支持经验,在IBM的7年间担任华东区非IBM logo产品技术支持团队team leader

SQL Server 2012全力打造大数据特性

本文讲的是SQL Server 2012全力打造大数据特性,同其他IT厂商一样,微软公司也做好了全面进军"大数据"领域的准备,而即将发布的SQL Server 2012将成为微软大数据战略的支点.最新的数据库平台将提供一系列的大数据功能,其中包括Apache Hadoop连接器.开源分布式计算架构,能够存储并处理海量的结构化与非结构化数据. 为了让用户对于SQL Server 2012的大数据功能有一个更直观的了解,记者采访微软数据库平台专家Mark Kromer,让他来谈一谈SQL

SQL Server 2016 CTP2.3 的关键特性总结_MsSql

SQL Server 2016带来全新突破性的  in-memory性能和分析功能来实现关键任务处理.全面的安全特性 -Always Encrypted 技术可以帮助保护您的数据 数据库方面的增强 Row Level Security已经支持In-memory OLTP 表.用户现在可以对内存优化表实施row-level security策略. 另外SCHEMABINDING.predicate 函数和内联表值函数都要包含NATIVE_COMPILATION编译选项. 使用NATIVE_COMP

SQL Server 2016 CTP2.3 的关键特性总结

SQL Server 2016带来全新突破性的  in-memory性能和分析功能来实现关键任务处理.全面的安全特性 -Always Encrypted 技术可以帮助保护您的数据 数据库方面的增强 Row Level Security已经支持In-memory OLTP 表.用户现在可以对内存优化表实施row-level security策略. 另外SCHEMABINDING.predicate 函数和内联表值函数都要包含NATIVE_COMPILATION编译选项. 使用NATIVE_COMP

给大家一个点子:利用MySQL的一个特性实现MySQL查询结果的分页显示

mysql|分页|显示 在mysql中利用select语句的一个特性就可以很方便地实现查询结果的分页,select语句的语法:    SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY]           [DISTINCT | DISTINCTROW | ALL]        select_expression,...        [INTO OUTFILE 'file_name' expor

利用MySQL的一个特性实现MySQL查询结果的分页显示

在mysql中利用select语句的一个特性就可以很方便地实现查询结果的分页,select语句的语法: SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY] [DISTINCT | DISTINCTROW | ALL] select_expression,... [INTO OUTFILE 'file_name' export_options] [FROM table_references [WHER