>什么是可能的类型“提前终止的原因
声明优化“.我在msdn中搜索过这个,但没有
获取完整的值列表.
>是否有DMV或扩展事件列出由于除了Good Enough Plan之外的原因而终止优化的所有查询?我提到了两篇没有列出完整可能性清单的文章. [另外,他们在我的数据库中给出了不同的结果].
> Finding: Query Compilation
Timeout
> Identifying Query Plans that are not good
enough
解决方法
由于内存压力,优化器被迫停止寻找更好的计划替代方案.应该调查和纠正原因,然后再次尝试查询编译.返回的计划很可能不是优化器在没有低内存条件时选择的计划.
>超时
这个原因很容易被误解.
查询优化器旨在快速找到合理的计划.它没有进行详尽的搜索以找到最佳的计划.通过设计,它可以避免在优化上花费更多时间.其中一个功能可以确保这是’超时'(不是时间的衡量标准).
优化器根据逻辑查询的复杂性,基数估计以及迄今为止发现的最便宜计划的估计成本(如果有的话)设置自己的“勘探预算”.具有更高基数的更复杂查询被赋予更高的预算.
如果在其中一个搜索阶段超出此预算,则阶段结束.这是优化器的设计和正常操作的一部分.需要更多优化工作的查询才能获得;那些不,不.
将“超时”想象为“找到足够好的计划”.
>找到了足够好的计划
这意味着与空白原因完全相同.这只是一个历史怪癖,计划成本低于0.909090 …(1 / 1.1)标记为这种方式.当出现此原因时,优化器代码中没有任何内容提前停止或以其他方式特殊处理或不同.
除了超出内存限制之外,没有任何“提前终止原因”对查询调优或性能分析意味着很多(如果有的话).我一般都会忽略它们.
忠告
基于实际性能指标(经过时间,cpu /内存使用,……在上下文中重要的任何内容)来定位查询调优工作.如果查询对于其预期目的来说太慢,请花时间加快速度.测量实际性能,将其与基线和历史进行比较,并针对重要差异进行目标调整.