我知道在重新启动 SQL 服务器(或)缩小数据库时将释放取消分配的内存,不幸的是,这对我的客户来说不是一个合适的解决方法。
如果 temp db 大小为 10mb,则在执行过程 temp db 的可用大小为 490mb 后增长为 500mb ..有什么方法可以释放分配的大小并重新获得它。使 tempdb 回到 10mb 而无需重新启动或收缩手动??
我知道在重新启动 SQL 服务器(或)缩小数据库时将释放取消分配的内存,不幸的是,这对我的客户来说不是一个合适的解决方法。
如果 temp db 大小为 10mb,则在执行过程 temp db 的可用大小为 490mb 后增长为 500mb ..有什么方法可以释放分配的大小并重新获得它。使 tempdb 回到 10mb 而无需重新启动或收缩手动??
重新启动或收缩将是这里最具影响力的选项,但您(风险自负)使用 DBCC 清除一些缓存和缓冲区(即:DBCC FREEPROCCACHE、DBCC DROPCLEANBUFFERS)
您可能已经知道,但重新启动实际上并没有缩小大小。随着实例重新启动,将完全按照默认大小创建一个新的 tempdb,该大小由配置的速率自动增长。这是许多人在为实例优化 tempdb 时首先考虑的领域之一。通常最好将初始 tempdb 大小设置为不需要扩展的大小,这样您根本不必自动增长它。
收缩正在调整文件的大小,但这通常是不希望的,特别是如果您冒着这样做的风险,而数据库上存在可能导致收缩期间损坏的打开事务。
不管采用哪种方法,做这样的事情一定要非常小心。
收缩是一个坏习惯。它可能会导致您分裂。
SQL Server 服务重新启动时会重新初始化 TempDb 大小。因此,如果您的初始大小为 20 GB,那么在重新启动 SQL 后将有 20 GB 的 tempdb 文件。清理缓冲区和缓存不会缩小您的 TempDb 文件。除非您有充分的理由这样做,否则不建议在工作时间在生产环境中清理缓冲区和缓存。
最佳实践是让 TempDb 大小最适合您的 SQL 操作;您可以拥有多个 TempDb 文件,并使 SQL 具有并行工作的优势。我一直在研究大于 4 TB 的大型 DW 解决方案,我们每个周末(非工作时间)都会重新启动服务。
在最坏的情况下,也不要缩小文件,直到您处于单次使用模式并且您不再喜欢 SQL Server。