设为首页 收藏本站
查看: 1101|回复: 0

[经验分享] 查询处理和执行----查询优化(1)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-7-18 09:53:18 | 显示全部楼层 |阅读模式
查询优化器的工作就是接收查询树并找到一个获取数据(结果)的好方式。查询优化处理基于成本原则,这个成本是抽象的测量值,用于评估不同的查询计划选项。SQL Server团队提供的当前模式工作如下:
  • 是否已缓存了有效的计划? 如果是则使用缓存的计划;否则继续
  • 是不是一个微不足道的(trivial)计划?如果是则使用这个trivial plan;否则继续
  • 应用简化。简化就是对查询树进行正规化(normalizing)的过程,并应用一些基本的转换来简化查询树。
  • 计划是否足够低成本?如果是则使用;否则就开始优化
  • 开始基于成本的优化
  • 阶段0----探索基本的规则、哈希和嵌套的连接选项
  • 计划的成本是否低于0.2?如果是则使用;否则继续
  • 阶段1----探索更多的规则以及可替换的连接排序。如果最好的(成本最低的)计划成本低于1.0,那么就使用该计划。否则,如果MAXDOP>0、是SMP系统、最低成本>并行的成本阈值,那么就使用并行(parallel)计划。比较并行计划和最佳串行计划的成本,并将成本更低者传到阶段2。
  • 阶段2----探索所有的选项,在有限数量的探索中选择成本最低的计划(the cheapest plan)。
上面所诉步骤的输出结果是能够放入缓存的可执行的计划。这个计划之后被安排执行。你可以通过sys.dm_exec_query_optimizer_info查看优化过程的内部工作状况,该DMV包含一组优化属性。如下图所示的其中部分counter,其中optimizations的occurrence(61)=search 0(21)+search 1(20)+search 2(0)+trivial plan(20)。
SouthEast.jpg
并行计划
并行计划是优化器选择的一个计划,它用来将合适的操作符(operator)分离到多个并行运行的线程。不是所有的的操作符都适合用于并行计划。优化器仅在下面的情形下选择并行计划:
  • 服务器有多个处理器
  • 最大并行度的设置允许并行计划,并且SQL Server配置选项cost threshold for parallelism的值(以时间秒为单位)要设置得比当前计划的最低成本估算更低
  • 并行计划的成本要低于串行计划
如果以上条件都满足,那么优化器就会选择并行操作。
Algebrizer树
解析器的输出结果是解析树,解析树不会永久保存,因而不能看到它的模样;而Algebrizer的输出结果是Algebrizer树,它会存储视图、默认值和约束,因为这些对象会经常被其他查询复用。这些对象存放在缓存,条件是type=CACHESTORE_PHDR:
  • select *  
  • from sys.dm_os_memory_cache_entries  
  • where type = 'CACHESTORE_PHDR'  

sql_handle或plan_handle
sql_handle和plan_handle都是哈希值:sql_handle是原始T-SQL源的哈希,而plan_handle是缓存计划的哈希。SQL是自动参数化的,因此两者的关系意味着多个sql_handle可以映射到一个 plan_handle。可以通过sys.dm_exec_sql_text (sql_handle | Plan_handle)查看原始T-SQL,通过sys.dm_exec_query_plan (plan_handle)查看计划的XML showplan。
理解统计
统计为SQL Server执行查询优化提供关键信息。统计包含数据的细节以及数据在表中的模样。查询优化处理利用统计来决定一个查询需要为一个给定的查询计划访问多少行。它使用这个信息为计划的每一步估算成本。统计是SQL Server根据查询自动创建的,其前提是AUTO_CREATE_STATISTICS选项被设置为ON。统计可以在SSMS里面看到,如下图。
SouthEast.jpg
要看实际的统计值,可以在属性页-->细节或通过DBCC查看,如下图:
SouthEast.jpg
下面的配置选项控制着如何创建统计:
Auto_create_statistics
Auto_update_statistics
Auto_update_statistics_asynchronously



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-22266-1-1.html 上篇帖子: 查询处理和执行----查询处理 下篇帖子: 查询处理和执行----查询优化(2)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表