Jus*_*ork 4 sql-server sql-server-2012
几天前,我向 SQL Server 2012 数据库添加了几个索引以帮助提高性能。今天,我们的带有 TempDB 的分区空间不足。TempDB 从不到 10 GB 增加到 38 GB。运行后:
SELECT SUM(unallocated_extent_page_count) AS [free pages],
(SUM(unallocated_extent_page_count)*1.0/128) AS [free space in MB]
FROM sys.dm_db_file_space_usage;
Run Code Online (Sandbox Code Playgroud)
看起来我在 tempDB 中有大约 22GB 的可用空间。我知道 TempDB 用于执行 SQL Server 完成的所有排序,但现在它导致了空间问题。如果 TempDB 有那么多可用空间,为什么它会抱怨服务器上的空间不足?我能做些什么来防止这个问题再次发生?
即使您现在在 tempdb 中有 22 GB 的可用空间,但这并不意味着之前没有使用过该空间。有些东西导致自动增长开始,一旦这个过程结束,就没有任何东西可以将 tempdb 收缩回其当前大小(我什至不打算谈论自动收缩......)。
听起来抱怨空间不足的原因是驱动器(或者它可能达到了 SQL Server 中设置的硬限制——我无法从你的措辞中完全分辨出来,但我猜是驱动器)。它识别出您有一个 38 GB 的 tempdb 文件,但 Windows API 不知道分配给 MDF 或 LDF 文件的磁盘空间是否为“可用空间”;所有这些都被 Windows 考虑使用,所以这一切都很重要。
防止此问题发生的最佳方法是找出导致 tempdb 适当增长和大小的原因。如果它是一次性事件(例如,在 sort_in_tempdb 打开的情况下创建索引),则 tempdb 将在您下次必须重新启动 SQL Server 时恢复到其默认大小。但是,如果它是由于常规工作或查询更改导致大量 tempdb 使用(例如,哈希连接溢出显着增加),则需要将此作为新的高水位标记并尝试获得更多的磁盘空间。
为了帮助弄清楚它是哪一个,您可以从Mark Storey-Smith 对上一个类似性质的问题的回答开始。
| 归档时间: |
|
| 查看次数: |
1014 次 |
| 最近记录: |