• 第一章:执行计划基本知识文本执行计划和XML执行计划


    图形执行计划很有用,其在于易读。不过,关于运算符的过多数据信息并不立即可以看到,在“工具提示”窗口中显示的信息也有所限制,“属性”窗口则显示完整的数据信息。要是有一种方法一次可以查看所有的数据信息该有多好呀!

    在处理复杂计划或大批量语句的查询时,显然不能够查找特定的信息,如表扫描或开销较大,不过不用担心,有两种方法可以使用:文本执行计划和XML执行计划。

    1.1.7.1文本估计计划

    要启用文本执行计划的文本版本,只需在查询前运行以下命令:

    SET SHOWPLAN_ALL ON;

    这里需要注意的是:一旦SHOWPLAN_ALL设为ON,则会收集后续即将执行的T-SQL语句,不过这些语句并不真正地执行,因此,我们获得了其估计计划,在收集完这些信息后一定要将此SHOWPLAN_ALL开关设为OFF。假如你忘记这一点,对于提交的CREATE、UPDATE或DELETE语句都将不会被执行。

    若要关闭SHOWPLAN_ALL开关,只需要简单地执行:

    SET SHOWPLAN_ALL OFF;

    当然,我们也可以使用等同的命令:SHOWPLAN_TEXT来完成以上的功能,只不过它只显示了执行的文本信息。这里,我们仅关注SHOWPLAN_ALL的介绍。

    1.1.7.2 文本的实际执行计划

    要启用或关闭实际执行计划的文本版本,请使用下面的命令:

    SET STATISTICS PROFILE ON

    以及:

    SET STATISTICS PROFILE OFF

    解释文本计划

    这里还是使用先前讨论图形执行计划时使用的最简单的查询,因此执行以下语句:

       1: SET SHOWPLAN_ALL ON;
       2: GO
       3: SELECT *
       4: FROM dbo.DatabaseLog;
       5: Go
       6: SET SHOWPLAN_ALL OFF;
       7: GO
       8:  


    执行完上面的查询后,在结果面板中显示估计计划。如下图所示的:
    clip_image001

    图6:文本执行计划

    第一行显示的是提交的SELECT语句执行结果,紧接着是查询计划内发生的物理运算符,在本例中只有一行,即表扫描。

    随着逐步深入,在以后的章节中将会看到更为复杂的文本计划,或许你很快意识到这些计划分析起来并不与图形计划一样容易。从查询中并没有容易掌握的方法,如先前我们在图形执计划中采用的“自右至左”的分析方法。不过你可以借助于数据的缩进和“|”符号(连接父子语句)的帮助从中间开始向右分析。

    除了第一列外,在“工具提示”窗口或“属性”窗口中隐藏的详细信息也显示一小部分,多数即将在此看到的信息会更多,因此,对于图形执行计划中的NODE ID,并不需要找出某个节点的父节点。而在SHOWPLAN_ALL中,我们看到有一个Parent的节点,如同从右查看,你将会看到许多其它熟悉的列,如TotalSubTreeCost、EstimateRows等等。有些列很难进行分析,如Defined List,以逗号分隔的列表。

    1.1.8 XML执行计划

    SQL Server 2005提供了一种显示执行计划的新的格式-XML计划,其丰富的功能是先前版本并未提供。

    1.1.8.1实际与估计XML计划

    要开启估计XML执行计划,使用以下命令:

       1: SET SHOWPLAN_XML ON
       2:  
       3: SET SHOWPLAN_XML OFF
       4:  


    与SHOWPLAN_ALL一样,SHOWPLAN_XML命令基本上也不执行T-SQL语句,而是以XML的格式收集T-SQL语句的执行计划信息,重要一点的是在结束收集信息后,记得使用SHOWPLAN_XML OFF关闭。

    解释XML计划

    下面通过一个简单的例子来说明:

       1: SET SHOWPLAN_XML ON
       2: GO
       3: SELECT * FROM dbo.DatabaseLog;
       4: Go
       5: SET SHOWPLAN_XML OFF
       6: GO

    执行后,结果如下图所示:
    clip_image001[1]

    此链接指向位于以下路径的XML文件:clip_image002
    点击链接将在新的浏览窗口中以XML格式查看执行计划,可以通过文本、网格或文件的形式查看,默认使用的是网格。

    首先列出的是BatchSequence,Batch和Statements元素,在本例子中,我们仅介绍单一Batch和单一Statement,接着是查看StmtSimple元素,它包含了语句的属性列表和QueryPlan的一些物理属性:

    clip_image003
    clip_image004
    从上面的输出信息可以看出,此信息要比SHOWPLAN_ALL提供的信息要多。注意到优化器选择了一个trivial执行计划,根据CachedPlanSize提供的信息可知。

    紧接着是RelOp元素,提供了物理操作的信息,本例是表扫描:

    clip_image005

    这里不仅提供了文本计划中具有的信息,同时也提供了更易于理解的方式,例如,对于像Defined List这些列比较难读,如OutputList元素的ColumnReference节,每一个均有相应的描述列的属性:

    clip_image006

    这种形式使得不但易读,而且更容易转化为原来的查询。

    回来先前的计划,在RelOp元素后有以下的“表扫描”元素:

    clip_image007

    接着是一系列定义值列表:

    clip_image009

    保存XML计划

    可以将此执行计划“另存为”以sqlplan为扩展名的格式文件,当以这种格式保存时,实际得到的是其图形执行计划。

    1.1.8.2使用Profiler捕获计划

    在进行数据库开发过程中,可以使用先前介绍的技术捕获T-SQL语句的执行计划,然而对于在测试或生产系统进行故障诊断时,显然是不够的,对于生产系统而言,可能有上千个会话执行数百个查询,在此情况下,我们需要采取一种自动捕获的机制,以便可以收集这些计划信息。

    SQL Server 2005为我们提供了这样一种工具:Profiler,通过它可以捕获XML执行计划,通过收集这些计划,查看开销比较大的查询或查看某一个计划,例如:想排除的“表扫描”操作。Profiler可以捕获像T-SQL语句、存储过程等事件的数据.(有关Profiler的详细信息可以参考http://msdn.microsoft.com/en-us/library/ms173757.aspx

    接下来,我们来看一下与之相关的事件:

    执行计划事件:

    n Showplan Text:此事件在每一个查询执行时产生与SHOWPLAN_TEXT相同类型的估计计划,也显示一些SHOWPLAN XML中可用的信息。

    n Showplan Text(unencoded):与showplan text一样,唯一不同的是它显示的是字符串

    n Showplan All:此事件在每一个查询执行时产生与SHOWPLAN_ALL相同类型的估计划。

    n Showplan All for Query Compile:此事件包含showplan所有事件,仅在查询编译完成后时发生

    n Showplan Statistics Profile:此事件产生与STATISTICS PROFILE命令相同的实际执行计划。

    n Showplan XML:当查询执行并生成估计执行计划是触发

    n Showplan XML for Query Compile:当查询编译完成时触发

    n Performance Statistics:与Showplan XML For Query compile事件相似,此事件捕获与计划有关的性能统计信息。

    要捕获执行计划的所有信息,可以使用Showplan XML或Showplan XML Statistics Profile。

    捕获Showplan XML Trace

    SQL Server 2005 Profiler Showplan XML事件捕获查询优化器使用的XML执行计划来执行查询,要捕获一个基本的Profiler跟踪,显示估计的执行计划,启动Profiler,建立一个新的跟踪,连接到要跟踪的服务器。

    切换至“Event Selection”选项,点击“Show All events”复选框,在Performance部分找到“Showplan XML”事件(点击“+”号展开,然后点击“Showplan XML”事件)。
    clip_image011

    不过你也可以设置一些其他的事件,如:

    clip_image012

    注意:默认,只有SASYSADMIN组的成员可以创建和运行一个Profiler 跟踪或得到ALTER TRACRE权限的操作者。
    这些额外的事件有助于分析XML计划的补充信息,例如,你可以查看在事件发生前后所发生的事情。

    在设置了Showplan XML事件后,在“Event Extraction Settings”选项上,可以选择将XML计划以文件的格式保存,以便日后进行分析。

    clip_image013
    设置完以上步骤后,点击“Run”运行来启动跟踪,当捕获到以上事件时,在跟踪窗口将会看到如下图一样的事件:

    clip_image014
    由于选取了显示Showplan XML事件,在TextData列下,可以看到实际的XML计划代码

    另外,也可以将showplan XML事件另存为一个文件,只需在此事件中右击,然后选择“Extract Event Data”,如下所示:

    clip_image015
    接着会弹出对话框提示来设置保存的文件名路径和格式(.sqlplan),双击保存的文件,即可在SSMS管理窗口中以图形的方式查看。

    另外,您也可以提供于SQL Sentry Plan Explorer这个免费的工具进行分析,关于该工具的下载可以通过以下链接进行http://www.sqlsentry.net/plan-explorer/sql-server-query-view.asp

    小结:

    在本章介绍了查询优化器和存储引擎的工作机制,这些操作均以估计执行计划和实际执行计划表示,接着介绍了一些如何查看这些计划的方法(文本、图形或XML),最后介绍了使用Profiler自动捕获的方法。

  • 相关阅读:
    #Laravel 笔记# 多语言化 App::setLocale() 持久化。
    thinkphp 3.2 发送邮件(Phpmailer)
    深度学习的注意力机制
    图像检索引擎vearch安装与测试使用
    word2vector
    GPU环境搭建
    ImportError: libSM.so.6: cannot open shared object file: No such file or dir
    shell中&&和||的用法
    Linux 远程连接sftp与ftp
    mysql-connector-java各版本及与mysql、JDK版本的对应
  • 原文地址:https://www.cnblogs.com/bigholy/p/2280450.html
Copyright © 2020-2023  润新知