我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019跑狗图高清彩图 > 执行开销 >

Microsoft SQL Server 2008性能分析之执行计划

归档日期:08-15       文本归类:执行开销      文章编辑:爱尚语录

  这是一个系统函数,每一个执行计划都对应着一些属性,在这个系统函数中包含着这些属性。

  Sys.dm_exec_sql_text:这是一个系统函数,返回文字格式的执行计划。

  在进行性能分析的时候有时候需要清除缓存以便进行下一次分析。SQL Server提供了一些工具来清除缓存的性能数据。使用下面的语句来完成这些任务。

  可以使用’ALL’,pool_name,’Object Plan’,’SQL Plans’,’Bound Trees’作为输入参数。’ALL’参数标明要清除所有的缓存,pool_name的值表明要清除的一个缓存池的名字。’Object Plans’清除对象计划(例如存储过程,触发器,用户定义函数等等)。’SQL Plans’用来清除要立即执行的语句。’Bound Trees’定义清除视图,约束等的缓存。

  注意:在使用这些语句清除缓存之前要想清楚,特别是在生产环境。这些对性能有很大的影响。清除这些缓存之后SQL Server需要从数据页中重新读取数据。并且SQL Server需要重新生成新的执行计划。因此在清除之前要想清楚这些对生产或者测试环境的影响。

  SQL Server 2005引入了动态管理对象,例如DMV,DMF。SQL Server 2008中添加了新的对象,新的属性。这些饱含非常有用的信息,利用这些信息可以监视SQL Server,诊断问题,进行性能监视。要仔细研究这些对象会很耗时。这里只是列举一些常用的。

  统计IO是是一个session选项。它返回域当前执行的语句相关的I/O信息。要使用这个选项首选清除数据缓存:

  STATISTICS TIME是一个用来返回CPU时钟时间的session选项。它返回语法分析,编译,执行的时间。要使用这个选项首选要清除执行计划缓存。

  从这些信息中可以获得执行这个语句时候的CPU时钟时间,编译时间,运行时间。运行下面的语句可以关闭这个选项:

  当需要分析一个单独的语句的性能的时候这个选项非常有用。当需要使用批处理的模式来 运行语句的时候需要度量会有所不同。在查询之前保存SYSDATETIME函数的值,并写入到一个表中。注意这个函数返回的时间格式是 DATETIME2,可以精确到100纳秒。这个函数的准确性取决于计算机硬件和操作系统版本。因为这个函数会调用 GetSystemTimeAsFileTime()这个WindowsAPI。需要统计时间的时候可以重复地运行请求语句,然后记录下需要的时间。

  执行计划是SQL优化器生成的如何处理给定的请求的一个工作计划。它包含这个请求中药用到的操作符。有一些操作可能会执行多次。一些计划分支可能会并行执 行。在这个工作计划中,优化器决定获取语句中涉及到的表的顺序,要使用到那些索引,要使用那些查询方法,要使用那些算法等等。事实上,优化器会在多个执行 计划中选择出一个最优的,资源耗费最少的。频繁地生成执行计划也会耗费时间,所以SQL Server也会根据数据量的大小估算生成执行计划所需要的阀值时间。生成执行计划的时间不会超过这个估算的阀值时间。还有一个阀值是根据耗费的资源计算 得到的。如果一个工作计划的资源耗费低于这个阀值,就认为它是足够好的,优化器就会停止优化使用这个计划。

  SSMS允许我们查看一个图形化的执行计划(快捷键Ctrl+L)。注意当查看一个执行计划的时候,查询并没有运行。一些度量值只能在运行完之后才能得到(实际查询得到的行的数目)。

  这个语句查询得到所有可能的聚合值,聚合属性是custid,empid,shipperid。如图1

  注意当这个执行计划占用很大的屏幕空间的时候可以点击右下方的按钮“+”不放,然后拖动鼠标可以查看想要查看的区域。

  执行计划是由一些操作组成的树状结构图。数据从子运算流向父运算。这个结构的顺序是从右到左,从上到下。在这个例子中,运算首选从聚集索引开始,然后是后面的操作缠绕运算-Table Spool

  注意每个运算符旁边有一个百分比,这个值表值这个运算在整个执行过程中所占的资源百分比,这个值只是优化器估计的值。SQL语句的优化工作应该放在那些所 占的百分比比较大的操作上面。当把鼠标放上去的时候,会有一个换色的提示框。有一个值是Estimated Subtree Cost。最上方,最作坊的运算时整个运算的资源开销。如图2

  注意这些值只是优化器估计出的值,优化器会使用这个值来和其他的估计值作比较进而选择出一个最优的执行计划。

  另外一个比较好的地方时你可以同时生成多个语句的执行计划,进而对他们进行比较。例如下面的语句:

  他们的 查询结果是一样的,但是执行计划是不同的。在每个执行计划的开头有一个百分比指示这个语句在所有的语句所占的开销的百分比。在这个例子中我们可以看到第一 个语句的比例是37%,第二个语句的比例是19%,第三个是30%,第四个是14%。从这个结果我们可以粗略的认定第四个语句的效率要高一些。

  与物理运算符匹配的逻辑运算符,如 Inner Join 运算符。逻辑运算符列在物理运算符之后,两者均位于工具提示的顶部。

  这个数据可以用来估算这个操作是不是造成很大的CPU或者I/O开销,一般Sort操作都会造成很大的I/O开销

  估计该操作执行的次数和实际执行的次数。这个数据可以帮助你找到更好的执行语句

  估计运算符生成的行数。有些情况下可以通过实际行数和估计行数之间的差异来判断一个SQL语句的优劣

  操作符生成的行的估计大小(字节)。可能你会疑惑为什么这个实际行数没有显示在执行计划里面,那是因为数据行里面有可变长度的数据类型

  这个数据之和一些特定的操作有关(非聚集的缠绕,远程请 求,行数缠绕,排序,表缠绕,表值函数,断言,过滤等)。只有在内层嵌套查询的时候这才会统计个度量信息,否则Rebinds是1,Rewinds是0。 这些数据表示内层的Init方法被调用。重绑和重绕的综合应该是外连接得到的行数之和。重绑意味着一个或者多个相关的连接参数改变了,需要重新估算。重绕 意思是相关的参数没有改变,可以重用先前得到的内部结果集

  可以通过设置以文本格式查看执行计划。设置SHOWPLAN_TEXT选项可以达到这个目的,如下:

  分析这个执行计划,从内层的分支到外层分支,从上到下。但是在这里我们只能看到运算符的名字和参数。运行下面的语句关闭这个选项:

  STATISTICS PROFILE选项会产生一个实际的计划。设置这个选项为ON的时候显示的结果和设置SHOWPLAN_ALL为ON差不多,不过多了两个属性Rosw和Executes,表示实际的行数和运行行数。

  如果想用自己的代码来描述执行计划或者把执行计划发送给客户或者同事,你会发现使用文本格式的信息很不方便。SQL Server 2008允许允许返回XML格式的执行计划内容,这非常利于使用应用程序代码处理。打开使用SQL Server 2008产生的xml格式的执行计划会显示成图形结果,后缀是.sqlplan。

  原文:看懂SqlServer查询计划对于SQLServer的优化来说,优化查询可能是很常见的事情。由于数据库的优化,本身也是一个涉及面比较的广的话题,因此本文只谈优化查询时如何看懂SQLServer查...博文来自:weixin_33709609的博客

  SQLSERVER2008在安装过程中需要选择组件,本文简单的介绍一下各组件的用途,方便安装时选择。从上图,可以看到SQLSERVER的组件分为了(实例功能)和(共享功能)。实例功能是指当前安装的实例...博文来自:故纸堆

  哈希连接哈希和合并连接都是分开处理内部源和外部源的。连接条件不能用作搜索参数。当没有为表或存在的不合适的索引明确指定搜索参数时,就要对那个表进行扫描。有可能哈希和合并连接有书签查找操作,但也未必,除非...博文来自:wangd1121的专栏

  背景:由于项目人数众多,同一个界面可能有几个人进行编码。不同的人在SQL语句性能上有所不同。有些页面存在短暂的卡屏,为了快速找出问题所在。由于涉及的项目使用的SQLSERVER数据库,这里使用SQLS...博文来自:aimsgmiss的专栏

  要优化,就得看懂执行计划,要看懂执行计划,首先要能显示多种格式的执行计划,而不仅仅是看图形的执行计划,因为文本的执行计划更细,能看出更多的问题。1、设置显示简单格式的执行计划,不执行sql语句 set...博文来自:SQL Server探索

  1.低内存;2.索引更改;3.统计信息更改;4.大量行计数更改;5.混合DDL和DML6.更改SET选项;...博文来自:xiaoye1202的博客

  上一篇文章讲了,如何捕获到正在执行的sql,拿到sql文本后,就可以看一下sql的估计执行计划,注意,只是估计,不是实际的执行计划。查看执行计划是优化sql的第一步。 1、显示估计的执行计划注意,下...博文来自:SQL Server探索

  在网上看到了很多关于卸载SQLserver2012数据库,第一步都是先控制面板找到MicrosoftSQLserver2012(64-bit)这一项开始卸载,我这根本没有,然后我就把控制面板中关于SQ...博文来自:tangtang789456的博客

  SQLServer2008简介2008年Microsoft公式发布的SQLServer2008该版本提供了一系列丰富的集成服务,可以对数据进行查询、搜索、同步、报告和分析之类的操作。数据可以存储在各种...博文来自:朱海燕的博客日记

  安装sql2008R2之前,需要先下载“AccessDatabaseEngine”组件并安装(百度上搜索下载就可以了),打补丁重启,再安装sql2008,安装时候提示兼容性问题,选择运行程序而不获...博文来自:haxianhe的博客

  1、进入升级流程1)、从开始菜单--所有程序以下位置进入安装中心2)、左侧栏点击【维护】--【版本升级】,此后,可在后续流程中输入序列号。2、序列号网上找来如下序列号:出处:博文来自:donghustone的专栏

本文链接:http://guidoon.com/zhixingkaixiao/315.html