Це можна зробити так:
-- 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 стискається досить просто, не потрібно довго його скорочувати.
Будьте уважні, що це щось на зразок "м'якого перезавантаження". Все буде вилучено з буферів і записано на диск. Це означає вплив на вашу підсистему вводу / виводу (запис), оскільки вона повинна обробляти всі операції запису. Після цього ви можете зменшити файл (що впливає на продуктивність читання і запису), і в кінці всіх процесів, які запитують будь-яку таблицю, потрібно буде повернути дані назад з підсистеми вводу / виводу в буфери. Це може зашкодити більше, ніж перезапуск.
Якщо ви використовуєте систему розробки, вам слід просто перезапустити машину замість цього способу. Але для деяких виробничих систем без відмовного партнера це може бути корисним.