已分配的临时数据库空间 - 会被回收吗?

use*_*910 2 sql-server sql-server-2008-r2 disk-space tempdb

我观察到生产环境中的 tempdb 在初始化后已经增长到 100 GB。

我知道由于服务器负载和一些昂贵的查询导致 tempdb 在短短两天内增长。我已经观察了一个多星期,发现这个尺寸没有进一步增长并且保持不变。

我在具有 8 个逻辑核心的服务器上为 tempdb 配置了一个 mdf 文件。虽然我可以根据逻辑核心添加多个 mdf 文件。

我观察到空闲页面大小和临时数据库数据文件的物理大小在我的情况下是相同的

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)

帮助我了解是否会在不显式执行脚本以缩小空间或通过重新启动服务器以重置临时数据库分配的情况下自动回收此物理空间?

Dan*_*man 5

与所有数据库一样,tempdb 中的空闲(未分配)空间被重新用于新对象。无需任何操作即可重用此空间。

tempdb 文件的物理大小将反映自上次启动实例以来增长的高水位线。实例重新启动后,大小将恢复为初始文件大小,如果发生增长,则释放磁盘卷上的空间。也可以使用 释放未使用的文件空间DBCC SHRINKFILE。这不应该是例行的,但如果增长是异常的,例如由于错误的查询,这可能是可取的。最好调整文件大小以适应预期的空间需求,并提供增长作为意外需求的安全网。

多个具有相同大小和增长的 tempdb 数据文件可以通过减少某些工作负载的分配页争用来提高性能。然而,这与空间开垦无关。