Temp DB何时会重新获得分配空间?

时间:2015-01-07 05:06:21

标签: sql sql-server memory-management tempdb

据我所知,重新启动SQL服务器(或)缩小数据库将释放解除分配的内存,遗憾的是,这不适合我的客户端。

如果临时数据库大小为10mb,在执行一个程序之后增长到500mb,临时数据库的空闲大小为490mb ..我有任何方法可以释放分配的大小并重新获得它。将tempdb恢复到10mb而不用手动重启或收缩??

2 个答案:

答案 0 :(得分:1)

重启或缩小将成为最有影响力的选项,但是你(自担风险)使用DBCC来清除一些缓存和缓冲区(即:DBCC FREEPROCCACHE,DBCC DROPCLEANBUFFERS)

您可能已经知道,但重启并没有实际缩小尺寸。在实例重新启动的情况下,新的tempdb将完全创建为默认大小,并按配置的速率自动增长。这是许多人在为实例优化tempdb时首先考虑的领域之一。通常最好将初始tempdb大小设置为不需要扩展的大小,这样您根本不必自动增长它。

缩小是调整文件的大小,但通常不需要这样做,特别是如果您在db上存在可能导致收缩期间损坏的开放事务时冒着这样做的风险。

无论采用何种方法,都要非常小心这样做。

答案 1 :(得分:1)

萎缩是一种坏习惯。它可能会导致碎片化。

SQL Server服务重新启动时重新初始化TempDb大小。因此,如果您的初始大小为20 GB,那么在重新启动SQL之后将有20 GB的tempdb文件。清理缓冲区和缓存不会缩小TempDb文件。建议不要在工作时间对生产环境执行清理缓冲区和缓存,直到您有充分的理由这样做。

最佳做法是使TempDb大小最适合您的SQL操作;您可以拥有多个TempDb文件,并为SQL提供并行工作的优势。 我一直在研究大于4TB的大型DW解决方案,我们每个周末(非工作时间)重新开始服务。

在最坏的情况下,在您处于单用模式并且不再喜欢SQL Server之前,请不要缩小文件。