是否应该允许回收 SQL Server TempDB 空间?

Pre*_*gha 1 sql-server-2008-r2 disk-space tempdb

如果我目前没有空间问题,我应该最初将我的 TempDB 大小设置为一个大空间而不是让它的空间被回收吗?

确定 TempDB 的最佳初始大小的最佳方法是什么?

我的 TempDB 目前为 12GB,并且设置为 10% 自动增长

Mik*_*Fal 5

TempDB(与任何其他文件一样)应调整为适合您的实例的稳定数量,这样它就不必增长。这个想法是尽量减少自动增长事件,因为任何时候你的文件必须增长,你的查询将被迫等到文件增长完成。我的 TempDB 大小的做法(这是我的做法,您的里程可能会有所不同)如下:

  • 总 TempDB 数据文件大小应该大约是所有数据库的总数据文件大小的 1/3
  • 数据文件的数量是逻辑内核数量的一半,最多 8 个数据文件。
  • 日志文件大小为 TempDB 数据文件总大小的 1/3
  • 我将 TempDB 放在一个 LUN 上,它会有一些空间可以增长,这样如果进程需要的 TempDB 比我分配的更多,TempDB 将有一定的增长能力。
  • 我为 TempDB 文件增长设置了明确的值,通常为 1GB(取决于文件大小)。我使用百分比来表示任何文件的增长,因为百分比增长更难预测和适应。

至于为操作系统提供空间,我通常不这样做。我唯一会回馈空间的是,如果有一个明显的失控进程将 TempDB 炸到异常大小。为了腾出空间,我重新启动 SQL 以重新创建 TempDB(因为 TempDB 在每次 SQL 服务启动时都是新创建的),因为缩小 TempDB 会导致损坏

关于 TempDB 究竟应该如何配置,有很多讨论和意见。再次,这是我的方法。有关 TempDB 最佳实践和方法的更多信息,我推荐Robert Davis 的这份白皮书(这是一个供应商站点,因此您必须注册)。