【发布时间】:2019-03-13 14:20:22
【问题描述】:
由于文件组“DEFAULT”中的磁盘空间不足,无法为数据库“TEMPDB”分配新页面。通过删除文件组中的对象、向文件组中添加其他文件或为文件组中的现有文件设置自动增长来创建必要的空间。
在执行具有近 2.5 亿条记录的选择语句的存储过程时遇到此错误。
即使我在 tempdb 中有大约 650gb 的空间,我也面临这个错误。想知道我能在这方面做些什么
查询:
SELECT u.Id, u.place, u.name, u.lname, LOWER(ue.email) AS Email, MIN(dp.BirthTime) AS Time
FROM tableA u
JOIN tableB ue ON ue.id = u.id AND ue.Did = 0
JOIN tableC dp ON dp.Id = u.Id
JOIN tableB dpe ON dpe.Id = dp.Id
LEFT JOIN tableB idpe ON idpe.Email = dpe.Email
LEFT JOIN tableE idp ON idp.Id = idpe.Id
LEFT JOIN tableD pidp ON pidp.Id = idp.Id
JOIN tableD cp ON dp.Id = cp.Id
where ISNULL(cp.FName,'') = '' AND ISNULL(cp.LName,'') = '' AND ISNULL(cp.IsActive,0) = 0 AND ISNULL(dp.Isinactive,0) = 0
AND ISNULL(pidp.FName,'') = '' AND ISNULL(pidp.LName,'') = ''
AND ISNULL(pidp.Isactive,0) = 0 AND ISNULL(idp.IsInactive,0)
AND ISNULL(u.EHome, '') != ''
GROUP BY u.Id, u.Isactive, u.name, u.EServer, ue.Email
【问题讨论】:
-
在此处粘贴您的执行计划。有东西溢出到 tempdb、散列或排序。
-
这 2.5 亿行有多少空间?这并不是一个很大的查询,但如果这是拉入 varbinary(max) 或其他大行,那么 650gb 很容易被吞噬。
-
查询有4个join和3个left join,我该怎么办?
-
请提供查询执行计划:stackoverflow.com/questions/7359702/….
-
@Alex 你能告诉我如何为数据库“TEMPDB”分配一个新页面,因为文件组“DEFAULT”中的磁盘空间不足
标签: sql-server tempdb