0

我知道在重新启动 SQL 服务器(或)缩小数据库时将释放取消分配的内存,不幸的是,这对我的客户来说不是一个合适的解决方法。

如果 temp db 大小为 10mb,则在执行过程 temp db 的可用大小为 490mb 后增长为 500mb ..有什么方法可以释放分配的大小并重新获得它。使 tempdb 回到 10mb 而无需重新启动或收缩手动??

4

2 回答 2

1

重新启动或收缩将是这里最具影响力的选项,但您(风险自负)使用 DBCC 清除一些缓存和缓冲区(即:DBCC FREEPROCCACHE、DBCC DROPCLEANBUFFERS)

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

收缩正在调整文件的大小,但这通常是不希望的,特别是如果您冒着这样做的风险,而数据库上存在可能导致收缩期间损坏的打开事务。

不管采用哪种方法,做这样的事情一定要非常小心。

于 2015-01-07T05:23:36.333 回答
1

收缩是一个坏习惯。它可能会导致您分裂。

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

最佳实践是让 TempDb 大小最适合您的 SQL 操作;您可以拥有多个 TempDb 文件,并使 SQL 具有并行工作的优势。我一直在研究大于 4 TB 的大型 DW 解决方案,我们每个周末(非工作时间)都会重新启动服务。

在最坏的情况下,也不要缩小文件,直到您处于单次使用模式并且您不再喜欢 SQL Server。

于 2015-06-18T04:36:25.023 回答