Answers:
您可以这样进行:
-- write everything from your buffers to the disc!
CHECKPOINT;
GO
-- Clean all buffers and caches
DBCC DROPCLEANBUFFERS;
DBCC FREEPROCCACHE;
DBCC FREESYSTEMCACHE('ALL');
DBCC FREESESSIONCACHE;
GO
-- Now shrink the file to your desired size
DBCC SHRINKFILE (TEMPDEV, 40960);
-- Make sure that there is no running transaction which uses the tempdb while shrinking!
-- This is most trickiest part of it all.
GO
最后一步是最棘手的。在收缩过程中,不应使用tempdb进行任何其他操作,因为这可能会导致SHRINKFILE
操作中止。由于tempdb非常容易收缩,因此不需要花费很长时间即可收缩它。
请注意,这类似于“软重启”。所有内容将从缓冲区中删除并写入光盘。这意味着对I / O子系统(写入)的影响,因为它必须处理所有写入操作。之后,您可以收缩文件(这会影响读写性能),最后,所有查询任何表的进程都需要将数据从I / O子系统检索回缓冲区。这可能会给重启带来更大的伤害。
如果您正在运行开发系统,则应该重新启动计算机,而不是采用这种方式。但是在某些没有故障转移伙伴的生产系统上,这可能很有用。
您只能按照以下步骤进行
USE tempdb;
GO;
dbcc freeproccache;
DBCC SHRINKFILE (tempdb_file_name, memory_in_MB);
GO;