Microsoft SQL Server 2005技术内幕:T-SQL查询笔记

logical operation:基于微软查询处理概念模型的逻辑操作。例如,联接运算符的physical operation属性表示联接算法(nested loops,merge ,hash)物理运算符

logical operation属性表示逻辑联接类型(Inner join,outer join,semi join 等等)逻辑运算符

如果没有与该运算符关联的逻辑操作,则这项度量的值与physical operation相同

actual number of rows:从该运算符实际返回的行数(只显示在实际的计划中)

estimated I/O  cost和estimated cpu cost:运算符在特定资源上的估计成本(I/O或CPU)这两个度量将帮助你确定运算符是否是I/O密集或CPU密集的

例如,你可以看到clustered index seek运算符主要与I/O有关,而hash match运算符主要与cpu有关

estimated operator cost:执行该操作的成本

estimated subtree cost:如前所述,他表示到当前节点为止整个子树的累积成本

estimated number of rows:该运算符预计的返回行数。在有些情况下,通过观察实际行数和估计行数之间的差异,你可以找出因统计信息不足或其他原因而导致的成本问题

estimated row size:你可能会奇怪为什么在实际的查询计划中没有显示该属性的实际值。因为你的表可能包含可变长度类型,表中行的大小各异

actual rebinds和actual rewinds:这两个度量仅与作为nested loops联接内侧的运算符有关,在其他运算符中,rebinds将显示为1,rewinds将显示为0

他们表示内部init方法被调用的次数。重新绑定次数和重绕次数之和等于联接外侧所处理的行数。重新绑定意味着联接的一个或多个参数发生更改后,必须重新计划

联接的内侧。重绕意味着任何相关参数都没有发生更改,可以重用之前的内侧结果集

信息提示框的底部显示该运算符的其他信息,如关联的对象名称、输出、参数等

http://www.cnblogs.com/lyhabc/articles/3912608.html

 

 

预估执行计划 VS 实际执行计划
有两种类型的执行计划:预估和实际。预估的执行计划是在执行之前由查询优化器计算;它表明优化器信任为最低消耗的执行计划。通常大约在几秒之内返回给用户。实际执行计划,另一方面,处理查询过程中实际执行的步骤。在查询完成后实际的计划被返回。有时,预估和实际的值会不同。在执行计划中值为定量数据。查看图1对于一些执行计划值的一个示例。
为什么预估和实际执行计划值不同?
有三个原因来解释为什么执行计划值不同。
1.预估执行计划不能被创建
在查询优化器对查询创建预估的执行计划之前,Algebrizer组件会验证查询。如果一个对象在查询中不存在,验证失败并且没有创建预估的执行计划。这种情况,当一个创建语句位于使用这个创建对象的相同批中。
2.陈旧的统计信息
SQL Server对每个索引创建关于每个列值的分布的统计信息。当查询优化器预估从一个操作返回的行数的时候,使用该信息,并且完全使用一个特定索引的消耗来预估。当在表中数据改变时,这些统计信息过期。如果查询优化器使用坏的统计信息,它会错误的计算执行计划的消耗。通过比较预估行数和实际行数,你可以看到在实际执行计划中一个操作的差异(见图1)。图1中高亮显示的差异是对表执行一个删除操作产生的。
3.并行性
如果安装SQL Server的机器有多个CPU,查询优化器会完成两次寻找最低消耗执行计划的过程;创建一个执行计划使用一个处理器,第二个执行计划利用多个处理器(并行性)。直到执行时才会决定运行这两个执行计划中的哪个。当用户请求查看预估执行计划,只有一个执行计划被显示。这个执行计划可能是、也可能不是当执行查询时查询引擎所选择的那个。 (见下图) 图1 比较EstimatedNumber of Rows和Actual Number of Rows
哪个执行计划更好?
一个预估执行计划几乎立即被返回,而实际执行计划不能。实际的执行计划给出了一个更加完整的图片,但是在生产环境中,为了获得实际执行计划而等待一个长时间运行的语句执行完成是不切实际的。
只有在实际执行计划中找到的最频繁使用信息,是从每个操作返回的实际行数。实际行数可以与预估行数比较。如果差异巨大,那么统计信息很可能过时了。在这种情况下更新统计信息可能会提高查询性能(查看TechNet文章“统计信息”获得更多关于这个话题的信息)。
另一种获得实际行数的方式是,检查表的索引统计信息的最后时间已更新。将该信息与数据库的活动联系起来,将会表名统计信息的陈旧情况。以下查询运行在sys.indexes表返回已更新的统计信息的最后日期:

复制内容到剪贴板
代码:
USE YourDatabase GO SELECT name AS index_name , STATS_DATE(OBJECT_ID, index_id) AS StatsUpdated FROM sys.indexes WHERE OBJECT_ID = OBJECT_ID('YourSchema.YourTable')

只在实际执行计划中找到的其他信息
Actual Rewinds和Rebinds的值只会应用到少数几个操作。这些值计数特定操作初始化的次数。大量的初始化可能导致高I/O使用。对于该话题更完整的涵盖,看看Grant Fritchey的书SQL Server执行计划
除了Actual Rewinds和Rebinds,Number of Executions在SQL Server 2008中引入。该值是一个操作被执行次数的计数。对一些操作,执行次数和返回行数相关,预估和实际的执行次数会根据预估和实际行数的不同而不同。在某些情况下,SQL Server不能预估执行计数,将会在Estimated Number of Executions显示值为1。
预估的执行计划包含预估的消耗,逻辑上导致实际执行计划包含实际消耗。然而,情况并非如此。正如之前提到的,计数值只是表明一个操作时间消耗上的相对昂贵程度。它不与任何实际值如CPU和I/O时间相关。

tt.jpg 

2016-1-28 10:43

tt.jpg

补充(1):


分析——》绑定——》优化


分析:检查,例如检查使用分隔标识符的表或列名称是否以数字开头,分析几乎是所有编程语言编译器的一项常规操作。


绑定:确定SQL语句所引用对象的特征检查请求语义是否有意义,例如检查From A join B的查询时,如果A是一个表B是一个存储过程,则绑定失败。


优化:类似于绑定,优化器一次只优化批处理中的一条语句,在编译器为该批处理生成执行计划并存储到plan cache之后将执行该计划的执行上下文(execute context)的特殊副本。sqlserver像缓存执行计划一样缓存执行上下文。sqlserver并不优化batch中的每条sql语句,他只优化那些访问表而且可能生成多个执行计划的语句,sqlserver优化所有的DML。只有被优化过的语句才会生成执行计划

 

补充(2):

执行计划指标值

logical operation:基于微软查询处理概念模型的逻辑操作。例如,联接运算符的physical operation属性表示联接算法(nested loops,merge ,hash)物理运算符

logical operation属性表示逻辑联接类型(Inner join,outer join,semi join 等等)逻辑运算符

如果没有与该运算符关联的逻辑操作,则这项度量的值与physical operation相同


actual number of rows:从该运算符实际返回的行数(只显示在实际的计划中)

estimated I/O cost和estimated cpu cost:运算符在特定资源上的估计成本(I/O或CPU)这两个度量将帮助你确定运算符是否是I/O密集或CPU密集的

例如,你可以看到clustered index seek运算符主要与I/O有关,而hash match运算符主要与cpu有关

estimated operator cost:执行该操作的成本

estimated subtree cost:如前所述,他表示到当前节点为止整个子树的累积成本

estimated number of rows:该运算符预计的返回行数。在有些情况下,通过观察实际行数和估计行数之间的差异,你可以找出因统计信息不足或其他原因而导致的成本问题

estimated row size:你可能会奇怪为什么在实际的查询计划中没有显示该属性的实际值。因为你的表可能包含可变长度类型,表中行的大小各异

actual rebinds和actual rewinds:这两个度量仅与作为nested loops联接内侧的运算符有关,在其他运算符中,rebinds将显示为1,rewinds将显示为0

他们表示内部init方法被调用的次数。重新绑定次数和重绕次数之和等于联接外侧所处理的行数。重新绑定意味着联接的一个或多个参数发生更改后,必须重新计划

联接的内侧。重绕意味着任何相关参数都没有发生更改,可以重用之前的内侧结果集

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中文 高清 全 Microsoft SQL Server 2005技术内幕 系列之一 其他的几本,我都会全部上传,有需要的点击我的用户名查看我所有的资源会有你想要的其他三本。 编辑推荐 通过专家们架构级的洞察力来优化企业级数据库SQL Server顶尖专家的视角,带你深入到SQL Server 2005性能调优和优化的内部。该书包括指导性强的实践、实用的建议及丰富的示例代码,使你的查询语句效率更高,效果更好,以达到数据库性能的优化。 探索如何 通过系统监视器和DMVs,来创建基线和监控工作负荷: 通过设计、操纵和管理跟踪,孤立性能问题: 使用内置的默认值、黑匣子,以及常见的标准跟踪来审计用户的活动; 使用扫描及查找、连接、聚合、联合及并行来分析用户的查询; 使用缓存计划和新计划来产生高效率的查询和低代价的查询; 探测和解决加锁、阻塞及死锁等并发问题; 通过实践来诊断和排查反应时间、吞吐量,以及可扩展的问题。 内容简介 本书是Inside Microsoft SQL Server 2000的作者Kalen Delaney的又一经典著作,是Inside Microsoft SQL Server 2005系列四本著作中的一本。书中详细介绍了如何使数据查询更加高能高效,同时使现有资源最大化的方法。本书还包含了大量的代码示例和表示例以帮助数据库开发人员和管理员理解复杂的逻辑并掌握查询调整和优化。通过阅读本书,数据库开发人员将能够加深对查询优化背景的理解和应用,并开发和调整优化出反应速度更快的数据库。   本书适合于专业数据库开发者、BI开发者、DBA和以SQL Server作为后台数据库的一般应用程序开发者,读者可以通过书中的最佳实践、高级技巧和代码示例来掌握查询调整和优化的技巧,以针对不同问题开发出切合实际的高效能的方案。 作者简介 Kalen Delaney还是微软出版社Inside Microsoft SQL Server丛书的编辑,她从事SQL Server方面的工作已有20多年。在SQL Server社区,她是一位知名的专家。她于1995年被评为微软最有价值的专家(MVP)。   Kalen是SQL Server Magazine的特约编辑和专栏作家,她还写作了大量的 目录 序 致谢 引言 Microsoft SQL Server技术内幕丛书的历史 丛书结构 《Microsoft SQL Server 2005技术内幕:T-SQL查询》 《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》 《Microsoft SQL Server 2005技术内幕:存储引擎》 《Microsoft SQL Server 2005技术内幕:查询、调整和优化》 例子和脚本 未被涵盖的主题 免责条款 如何获得支持 关联网站 微软学习站点

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值