SHRINKFILEでファイルを圧縮する際に、tempdbが圧縮できなかったケースがあったので覚書
temdbを圧縮するコマンドはこんな感じ。
DBCC SHRINKFILE(tempdb, 0)
ただ、今回は以下のようなエラーが出ました。
DBCC SHRINKFILE ページ N:Nは、作業テーブル ページなので移動できませんでした。このエラーメッセージで検索してもあまり情報がありません。
で、英文では以下のようなメッセージのようです。
Page N:N could not be moved because it is a work table page.
こちらのメッセージで調べると、クエリプランを再作成が必要だそうです。
DBCC FREEPROCCACHE
を行うことで、一時テーブルのキャッシュがクリアされて圧縮可能となりました。
ただ、FREEPROCCACHEはそれなりにコストがかかる作業かなと思うので、
DBCC FREESYSTEMCACHE (‘Temporary Tables & Table Variables’)
などの方が良いかもしれません。(未調査です)
ちなみに、今回のようにtempdbの圧縮が失敗すると、tempdbの初期サイズが書き換わってしまうそうです。
tempdbが肥大化していた場合、次回のSQLServerの起動に悪影響を与えることもあるそうなので、注意したほうが良さそうです。
【参考URL】
TempDB を圧縮する場合の注意点について