【发布时间】:2013-11-08 22:08:46
【问题描述】:
环境: Windows 2008 R2、SQL Server 2008 SP1
问题: 9表的表内连接查询在实际执行计划中得到“提前终止语句的原因:超时”。
分配了错误的内存授予。
排序是在 tempdb 而不是 ram 中完成的,即使有大量可用的 ram。
在 tempdb 中进行排序时性能很慢。
考虑: 如果我从 9 个表之一中删除、创建和删除其中一个索引,则查询将再次得到全面优化,并且在 ram 中以完整的性能进行排序。但是,只要我稍微修改查询,它就会再次失去完整的优化。
问题: 有没有人见过这个问题?
有什么方法可以获取有关“超时”发生原因的更多信息吗?
优化器到底在做什么?
如果没有解决如何批准查询优化器问题的解决方案,我会考虑为 tempdb 制作一个 ramdisk。将 ramdisk 用于 tempdb 有哪些风险?
我已经尝试过的事情: 使用 FULLSCAN 更新 {ALL 9 Tables} 的统计数据
INDEX REBUILD 暂时像我上面所做的 DROP CREATE DROP 操作一样工作。
【问题讨论】:
-
如果您添加更详细的信息,例如实际查询计划本身,我们可以更好地回答这个问题。
标签: sql sql-server sql-server-2008 sql-server-2008-r2