Вы можете сделать это следующим образом:
-- 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 довольно легко сжать, его сокращение не займет много времени.
Помните, что это что-то вроде «мягкого перезапуска». Все будет удалено из буферов и записано на диск. Это означает влияние на вашу подсистему ввода / вывода (запись), поскольку она должна обрабатывать все операции записи. После этого вы можете сжать файл (что влияет на производительность чтения и записи), и в конце все процессы, которые запрашивают любую таблицу, должны будут извлечь данные из подсистемы ввода-вывода в буферы. Это может повредить больше, чем перезагрузка.
Если вы используете систему разработки, вам нужно просто перезагрузить компьютер вместо этого. Но на некоторых производственных системах без отказоустойчивого партнера это может быть полезно.