小知识:SQL Monitor Report的使用
2023-03-19 07:47 AlfredZhao 阅读(376) 评论(0) 编辑 收藏 举报在上一篇 优化利器In-Memory开启和效果
中,提到的两个SQL对比,使用的是传统的dbms_xplan.display_cursor
方式来查看执行计划,好处是文本输出的通用性强,基本信息也都有。
但如果大家参加过我们的RWP培训,就会发现O原厂强烈推荐大家使用的一个工具是 SQL Monitor Report,且要使用ACTIVE的类型,这可以让看SQL执行计划变得赏心悦目。
本文就简单介绍下,如何使用 SQL Monitor Report,也以之前的例子,来更直观的看到二者执行计划的差异:
- 1.准备通用的sqlmon.sql脚本
- 2.执行两条SQL,并确认各自的sql_id
- 3.调用sqlmon脚本生成SQL Monitor Report
- 4.对比两个SQL Monitor Report
1.准备通用的sqlmon.sql脚本
为了更具通用性,这里以SQL_ID为输入条件:
vi sqlmon.sql
set pagesize 0 echo off timing off linesize 1000 trimspool on trim on long 2000000 longchunksize 2000000 feedback off
spool sql_monitor_&sql_id\.htm
select dbms_sqltune.report_sql_monitor(type=>'ACTIVE', sql_id=>'&sql_id', report_level=>'ALL') monitor_report from dual;
spool off
2.执行两条SQL,并确认各自的sql_id
这次使用更明确的hints来区分是否使用In-Memory和确保都可以生成SQL Monitor Report:
--SQL1:
select /*+ monitor */ count(*) from L
sql_id: ahtu40vr8dbhu
--SQL2:
select /*+ monitor no_inmemory */ count(*) from L
sql_id: 7rzcsju067wr0
获取sql_id有多种方式,其实最方便的就是也可以通过传统看执行计划的方式来获取。
3.调用sqlmon脚本生成SQL Monitor Report
SQL> @sqlmon
Enter value for sql_id: ahtu40vr8dbhu
Enter value for sql_id: ahtu40vr8dbhu
SQL> @sqlmon
Enter value for sql_id: 7rzcsju067wr0
Enter value for sql_id: 7rzcsju067wr0
4.对比两个SQL Monitor Report
SQL1的SQL Monitor Report:
SQL2的SQL Monitor Report:
除了之前执行时就体验的执行时间差异,其对IO资源的实际消耗也可以非常直观的看到,二者有很大的差异。
AlfredZhao©版权所有「从Oracle起航,领略精彩的IT技术。」