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


24

在SQL Server 2008中收缩Temporary db时,最佳做法是什么?

使用以下内容有风险吗?

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

最佳实践是找出使之增长的原因,并加以解决。如果缩小它,它只需要再次增长就需要时间和IO
Nick.McDermaid 2014年

是的我知道。但是当我不得不的时候,要主动采取行动已经太迟了:)这是最好的解决方案吗?

对不起,我不能帮你。
Nick.McDermaid 2014年

Answers:


11

最佳做法是主动监视Tempdb的正常使用情况并相应地设置大小。如果这是一种临时情况,其中Tempdb已增长到这种大小并具有PROD env,则我将在每周维护期间重新启动SQL Server Services。之后,Tempdb将恢复到其配置的大小。

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

清理过程高速缓存,缓冲区高速缓存等将对数据库性能本身产生负面影响,直到不重新创建它们。我不会在PROD上执行此操作。

希望有帮助!


感谢您的投入。用sp_who检查tempdb中的进程是否足够?

1
我认为这不是找出是否正在使用temp db的可靠方法。我认为,仅当有人直接在SSMS中直接创建临时表时,这种情况才会出现。但是,如果由于内存溢出等原因由于查询操作而执行了相同的操作,则它将不会显示在sp_who2中。这个问题实际上是一个单独的线程。请创建它,因为这是一个单独的讨论。如果先前的答案对您有帮助,请将其标记为答案。这将帮助处于类似情况的其他人。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.