Você pode fazer isso desta maneira:
-- 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
O último passo é o mais complicado. Durante o processo de redução, nenhuma outra ação deve usar o tempdb, pois isso pode causar um cancelamento da sua SHRINKFILEoperação. Devido ao fato de o tempdb ser bastante fácil de encolher, não deve demorar muito para encolhê-lo.
Cuidado que isso é algo como uma "reinicialização suave". Tudo será removido dos buffers e gravado no disco. Isso significa um impacto no seu subsistema de E / S (gravação), pois ele tem que lidar com todas as operações de gravação. Depois disso, você pode reduzir o arquivo (que afeta o desempenho de leitura e gravação) e, no final, todos os processos que consultam qualquer tabela precisarão recuperar os dados do subsistema de E / S para os buffers. Isso pode prejudicar mais do que uma reinicialização.
Se você estiver executando um sistema de desenvolvimento, reinicie a máquina em vez disso. Mas em alguns sistemas de produção sem um parceiro de failover, isso pode ser útil.