当运行需要排序的给定查询时,我们的tempdb空间已用完。我们有几个关于如何解决它的理论,但这取决于SQL Server在tempdb中存储的内容。
它是存储整行还是只存储主键?或者它也可能存储排序所需的列?
我们正在使用SQL Server 2008
答案 0 :(得分:3)
这不是那么简单......排序什么?你的意思是在索引构建或查询期间?
从这个参考: https://docs.microsoft.com/en-us/sql/relational-databases/indexes/sort-in-tempdb-option-for-indexes
这里必须有足够的空间用于tempdb存储排序运行。 这些包括表的数据行。必须有足够的 目标文件组中的可用空间,用于存储最终索引 结构体。这包括表的数据行和索引 B-树。
所以可以将整个数据行存储在场景中,另外它可以存储索引的BTree,并且排序可能需要多次“运行”,因此它实际上可能不止于此。< / p>
你到底想要完成什么?我不明白为什么这些信息会决定你要做什么来解决它...如果确实如此,你可以通过创建一个包含大列的表来进行测试,强制排序,然后查看TempDB中使用了多少空间确认。
您是否可以通过使用正确的索引/重写查询来阻止排序?
您可能希望阅读本文并尝试以下建议:https://sqlkiwi.blogspot.com/2010/08/sorting-row-goals-and-the-top-100-problem.html