是否有必要后重新启动SQL服务器DBCC SHRINKFILE
上tempdb.mdf
或有任何其他方法,以减少大小tempdb.mdf
,无需重新启动SQL服务器?
请帮忙,因为我需要这个用于生产服务器,我希望在没有任何停机时间的情况下进行收缩。
Ion*_*nic 16
你可以这样做:
-- 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
Run Code Online (Sandbox Code Playgroud)
最后一步是最棘手的。在收缩过程中,任何其他操作都不应使用 tempdb,因为这可能会导致您的SHRINKFILE
操作中止。由于 tempdb 很容易缩小,因此缩小它应该不会花很长时间。
请注意,这类似于“软重启”。一切都将从缓冲区中删除并写入光盘。这意味着会对您的 I/O 子系统(写入)产生影响,因为它必须处理所有写入操作。之后,您可以缩小文件(这会影响读写性能),最后,查询任何表的所有进程都需要将数据从 I/O 子系统检索回缓冲区。这可能比重启更伤人。
如果你正在运行一个开发系统,你应该只是重新启动机器而不是这种方式。但是在一些没有故障转移伙伴的生产系统上,这可能很有用。