ET就是做这么一个事情的。
我们可以在sql前面加explian直接执行来查看执行计划,也可以通过下图的方式来查看执行计划。值得一提的是,我们一般用文本的方式查看,因为信息紧凑,也可以复制。
ET就是准确告诉DBA,在这个语句的执行过程中,每一个操作符(对应的执行计划里面的每一行)具体耗时多少,这个是一个非常关键的信息。
如果我们要查看ET,首先需要确认这两个参数是否打开,一般是打开的:
select * from v$dm_ini where para_name IN(
'ENABLE_MONITOR','MONITOR_TIME'
)
这两个参数需要为1,且生产环境上,这两个参数也可以调整为1.
下面就是我们真正执行操作,去看ET的步骤了。
先设置好这个参数(仅对当前会话生效):
sf_set_session_para_value('MONITOR_SQL_EXEC',1);
注意:这个参数,在dm.ini也有这个配置;生产环境一般都要关闭(设置为0),即在需要使用的时候通过上述SQL,在会话级打开即可。
在执行了上述调整参数的窗口(注意,是同一个窗口里面),再执行我们需要分析的语句,获取完全部结果集(如果结果集很大,就取个limit)
然后,我们在消息窗口点击执行号,就可以看到我们每一个操作符的耗时时间了:
注意:在执行时间详情分析的界面中,我们重点关注 TIME(US)和 SEQ 两个列;第一列顾名思义,说的是这个步骤的耗时;第二个列,说的是这个操作符对应的是执行计划里面的哪一行(就是我们用文本方式查看执行计划时的行号) —— 这对应起来了。
1)有时候我们SQL再怎么复杂,通过这个方式,其实可以快速的定位是计划哪里的问题,在反过头去看SQL语法,是对应一个超复杂的SQL的哪部分需要优化。
2)当然,在一个复杂关联的SQL里面,如果因为某些原因,关联方式是失准的,可能会变得比较复杂。
文章
阅读量
获赞