gpt4 book ai didi

sql-server - SQL Server 2012 : Sort operator causing tempdb spill

转载 作者:行者123 更新时间:2023-12-02 21:20:10 25 4
gpt4 key购买 nike

我有一个 T-SQL 查询 (SQL Server 2012) 可以完成这项工作,但是当我查看执行计划时,我看到一个带有警告的排序运算符:“运算符在执行期间使用 tempdb 溢出数据泄漏级别为 1。”

到目前为止我所做的阅读表明,如果我使用“order by”子句,我可以消除这个排序迭代器。这对我来说不是一个选择,因为我无法进行子查询排序并且对最外层查询进行排序而不删除排序迭代器。

我在之前的执行计划建议的地方添加了非聚集索引。

我还能做些什么来解决这个“tempdb 溢出”警告吗?目前我没有更多的想法。

感谢您的任何想法。

enter image description here

USE MIA_2014_15_v1;
GO

/*
Notes:
* The outer query exists so that I can filter by a windowed function (Date_Count).
*/

SELECT q.Campus,
q.Student_ID,
q.Student_Name,
q.DATEIN,
q.TIMEIN,
q.[TIMEOUT],
q.Date_Count
FROM (
SELECT TC_Hours.Campus,
TC_Hours.[Student ID] AS Student_ID,
Students.Student_Name,
TC_Hours.[Date] AS DATEIN,
TC_Hours.[Time In] AS TIMEIN,
TC_Hours.[Time Out] AS TIMEOUT,
count(TC_Hours.[Date]) OVER (
PARTITION BY TC_Hours.Campus,
TC_Hours.[Student ID],
TC_Hours.[Date]
) AS Date_Count
FROM dbo.TC_Hours_District TC_Hours
LEFT JOIN dbo.Base__Student_Name_by_FY Students ON TC_Hours.Campus = Students.Campus
AND TC_Hours.[Student ID] = Students.Student_ID
WHERE (NOT students.Student_Name IS NULL)
AND Students.FY = 'FY15'
) q
WHERE q.Date_Count > 1;
GO

最佳答案

实际行数大于估计行数。 SQL Server 在执行之前授予内存,并查看估计值。在运行时,它会获得比预期更多的行,因此在临时数据库中排序溢出。在这种情况下,您所能做的就是确保估计值正确。尝试更新相关表的统计信息。逐一删除谓词以找到导致错误估计的谓词。您可以尝试从那里创建新的统计数据。

此类泄漏并不罕见。如果不是一些 super 重要的查询,我不会太打扰。

关于sql-server - SQL Server 2012 : Sort operator causing tempdb spill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28240642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com