回答:
これは次の方法で実行できます。
-- 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;