sql-server – 找不到足够好的计划的查询

前端之家收集整理的这篇文章主要介绍了sql-server – 找不到足够好的计划的查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个sql Server 2012数据库.我注意到一些查询提前终止语句优化的Reason的价值,并且都给出了足够好的计划.现在我的问题是:

>什么是可能的类型“提前终止的原因
声明优化“.我在msdn中搜索过这个,但没有
获取完整的值列表.
>是否有DMV或扩展事件列出由于除了Good Enough Plan之外的原因而终止优化的所有查询?我提到了两篇没有列出完整可能性清单的文章. [另外,他们在我的数据库中给出了不同的结果].

> Finding: Query Compilation
Timeout

> Identifying Query Plans that are not good
enough

解决方法

>超出内存限制

由于内存压力,优化器被迫停止寻找更好的计划替代方案.应该调查和纠正原因,然后再次尝试查询编译.返回的计划很可能不是优化器在没有低内存条件时选择的计划.
>超时

这个原因很容易被误解.

查询优化器旨在快速找到合理的计划.它没有进行详尽的搜索以找到最佳的计划.通过设计,它可以避免在优化上花费更多时间.其中一个功能可以确保这是’超时'(不是时间的衡量标准).

优化器根据逻辑查询的复杂性,基数估计以及迄今为止发现的最便宜计划的估计成本(如果有的话)设置自己的“勘探预算”.具有更高基数的更复杂查询被赋予更高的预算.

如果在其中一个搜索阶段超出此预算,则阶段结束.这是优化器的设计和正常操作的一部分.需要更多优化工作的查询才能获得;那些不,不.

将“超时”想象为“找到足够好的计划”.
>找到了足够好的计划

这意味着与空白原因完全相同.这只是一个历史怪癖,计划成本低于0.909090 …(1 / 1.1)标记为这种方式.当出现此原因时,优化器代码中没有任何内容提前停止或以其他方式特殊处理或不同.

除了超出内存限制之外,没有任何“提前终止原因”对查询调优或性能分析意味着很多(如果有的话).我一般都会忽略它们.

忠告

基于实际性能指标(经过时间,cpu /内存使用,……在上下文中重要的任何内容)来定位查询调优工作.如果查询对于其预期目的来说太慢,请花时间加快速度.测量实际性能,将其与基线和历史进行比较,并针对重要差异进行目标调整.

将保证干净的数据存储在适当的关系模式中,包含有用的统计信息和索引,以及编写良好且易于优化的查询.

猜你在找的MsSQL相关文章