全部博文(141)
分类: 数据库开发技术
2012-03-28 09:20:11
查询优化器内核剖析第五篇:进一步的了解执行计划
系列文章索引:
在上一篇中,我们稍微的谈了一些有关执行计划的知识,本篇的目的主要是补充上一篇,因为执行计划的东西很多很多,如果要讲清楚,那就得用一本书的篇幅来讲述,看以后的安排,如果有时间,可以进一步的尝试写写。
在上一篇中,我们说了,可以再图形化执行计划中查看数据的流向等相关信息,同时,也可以通过把鼠标放在一些操作或者箭头上查看更多的信息。另外,我们还可以在物理操作符和箭头上,点击右键,选择“属性”,查看更多的信息,如下图所示:
其实在很多的时候,图形化展示的信息是很有限的,毕竟有很多的信息不方便在图形中显示出来,所以为了查看更加具体的信息,我们可以查看执行计划的XML格式和普通文本格式(普通文本的格式以后会被微软逐近的弃用,但是如果是对SQL Server2000进行调优,那么还是只能用普通文本格式的执行计划来进行的)。
如果在之前我们得到的图形化的执行计划的显示窗口,点击右键,然后选择“Show Execution Plan XML”,如下图所示:
这个时候,就显示如下:
我们这里不会讲述如何来解读这个XML格式的执行计划,以后可能会用一些专题来讲述,并且在本系列的后文文章中,如果用到了,会做适当的必要性的讲解。
除此之外,我们还可以通过SQL语句来获取执行计划(只能用SQL语句来获取XML格式和普通文本格式的执行计划)。
我们先用一个表格来总结一下查看执行计划的几种方式,如下:
注意:很多的语句都是Set Show_XXX On,有“On”就有对应的“Off“。
下面,我们就来查看之前的SQL语句的XML格式的执行计划:
运行之后,得到如下的结果显示:
点击蓝色的链接,在SQL Server 2008中就看可以到这个XML格式的执行计划以图形化的形式展示出来。
如果是在2005中,那么就会直接显示XML格式。这个时候,我们可以把这些XML格式的执行计划保存为.sqlplan为后缀的文件,那么双击就可以以图形化的形式查看了。
如果运行下面的SQL语句:
那么就会显示基于普通文本的格式的执行计划,如下所示:
普通文本格式的不好之处就是不要阅读,但是它包含的信息是最多的。
除了采用上面的的方法来查看之外,还可以利用DMV(动态管理视图)来查看和SQL Profiler或者SQL Trace来查看,我个人比较喜欢这个格式,但是DMV的学习曲线更加的陡峭,但是一旦学会,可以做很多的事情,特别是在性能优化与故障排除方面。、
在这里,我介绍一下使用DMV来看。之前我们谈到的,当一个查询被优化之后,它的执行计划就会被放在了计划缓存中,也就是在内存中,所以我们可以采用sys.dm_exec_query_plan这个动态管理函数(DMF)来获取这个查询的执行计划(DMF常常和DMV结合在一起使用,以后谈到DMV,我们就指代:DMV和DMF)。
我们运行下面的查询:
在上面的查询中,涉及到了sys.dm_exec_requests这个动态管理视图,这个DMV就是放映了当前正在执行查询,而session_id就是当前运行的这个查询的回话id,我们可以通过查看一些系统表得到。这里就稍微的提及一下,我们会面还有更多的讲述!
今天就到这里!下一篇讲述Join的一些知识,大家可以认为Join没有什么,但是“次Join非彼Join“,大家拭目以待 :)。