首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server查询优化器执行计划提前终止语句的原因:TimeOut

SQL Server查询优化器执行计划提前终止语句的原因:TimeOut
EN

Stack Overflow用户
提问于 2013-11-09 06:08:47
回答 2查看 2.8K关注 0票数 2

环境: Windows 2008 R2、SQL Server 2008 SP1

问题:9个表的表内连接查询在实际执行计划中得到“提前终止语句的原因: TimeOut”。

分配了错误的内存授权。

排序是在tempdb而不是ram中完成的,即使有大量的ram可用。

在tempdb中进行排序时,性能较慢。

考虑一下:如果我从9个表中删除、创建和删除其中一个索引,查询将再次得到完全优化,排序将在ram中以完全性能完成。然而,只要我稍微修改一下查询,它就会再次失去完整的优化。

问:以前有没有人见过这个问题?

有没有办法获得更多关于为什么会发生“超时”的信息?

优化器到底在做什么?

如果没有解决查询优化器问题的方法,我会考虑为tempdb创建一个ramdisk。将ramdisk用于tempdb有什么风险?

我已经尝试过的事情:使用FULLSCAN更新{所有9个表}上的STATS

索引重建的工作原理暂时类似于我上面的DROP CREATE DROP操作。

EN

回答 2

Stack Overflow用户

发布于 2013-11-09 06:19:34

可能是您的索引变得碎片化了。如果您经常插入/删除/更新这9个表,则可能会发生这种情况。

示例te重建索引:

代码语言:javascript
复制
ALTER INDEX MyIndex ON MyTable REBUILD

一段时间后,插入/删除/更新将再次对索引进行碎片处理。您可以安排重建,以防止性能下降。例如,请参阅:

http://technet.microsoft.com/en-us/library/ms180074(v=sql.100).aspx

票数 0
EN

Stack Overflow用户

发布于 2019-11-04 22:53:19

这里有一篇文章讨论了这一点:https://blogs.msdn.microsoft.com/psssql/2018/10/19/understanding-optimizer-timeout-and-how-complex-queries-can-be-affected-in-sql-server/

有什么症状?

以下是一些涉及的因素:您有一个复杂的查询,其中涉及大量的连接表(例如,8个或更多的表被连接)。

请注意,将许多表联接在一起意味着SQL需要考虑许多可能的联接顺序。

一种可能的解决方案是使用临时表分解成中间查询;另一种方法是自己确定最佳连接顺序并使用hint FORCEORDER。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19869414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档