在生产环境中缩小 Tempdb 的最佳实践

Mco*_*col 28 sql-server shrink tempdb

在 SQL Server 2008 中缩小临时数据库时使用的最佳实践是什么?

使用以下方法有风险吗?

use tempdb
GO

DBCC FREEPROCCACHE -- clean cache
DBCC DROPCLEANBUFFERS -- clean buffers
DBCC FREESYSTEMCACHE ('ALL') -- clean system cache
DBCC FREESESSIONCACHE -- clean session cache
DBCC SHRINKDATABASE(tempdb, 10); -- shrink tempdb
dbcc shrinkfile ('tempdev') -- shrink db file
dbcc shrinkfile ('templog') -- shrink log file
GO

-- report the new file sizes
SELECT name, size
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');
GO
Run Code Online (Sandbox Code Playgroud)

小智 14

最好的做法是主动监控 Tempdb 的正常使用情况并相应地设置大小。如果这是 Tempdb 已经增长到如此大小并且它是 PROD 环境的一种情况,我会在每周维护期间重新启动 SQL Server 服务。之后 Tempdb 将恢复到其配置的大小。

只要不使用 Tempdb 就可以缩小文件,否则现有事务可能会因阻塞和死锁而从性能角度受到影响。

清理过程缓存、缓冲区缓存等将对数据库性能本身产生负面影响,直到它们不被重新创建。我不会在 PROD 上这样做。

希望有帮助!