在進行數據庫收縮時,我們有2個可用選項:NOTRUNCATE,TRUNCATEONLY。這篇文章我們會詳細討論下這2個選項的具體區別。
NOTRUNCATE當你對數據庫收縮命令提供NOTRUNCATE選項時,意味著SQL Server將你數據庫末尾的頁移到前面,那里可以找到一些空閑的未分配空間(將釋放的空間繼續保留在文件中)。唯一的區別是數據文件本身不會收縮。
這就是說在數據庫末尾的未使用空間還是沒有重聲明回給文件系統。用NOTRUNCATE選項進行數據收縮后,最后在你數據文件的末尾會有一些空的可用空間——當然會帶來索引碎片。
TRUNCATEONLY當你用TRUNCATEONLY參數執行數據庫收縮命令時,SQL Server從末尾到開始,只要在文件末尾有空的可用空間,就會把數據文件清理掉。使用這個選項SQL Server在數據文件里不會移動任何頁。你本人必須確認在你的數據文件末尾會有一些可用空間,這樣TRUNCATEONLY會為你申明一些空間。
如果你已經仔細閱讀了這點,現在你應該能想象當你進行常規的數據庫收縮,不使用這些選項時,SQL Server內部會發生什么:
數據庫收縮命令提供的任何選項都與你無關:因為從不推薦進行數據庫收縮!如果你知道在你數據文件末尾有未分配的空間,你不想要這些的話,使用TRUNCATEONLY選項進行數據庫收縮更安全,因為你不會引入索引碎片。但一旦你使用了NOTRUNCATE選項,SQL Server需要在你的數據文件里移動頁,這會帶來嚴重的索引碎片。
感謝關注!
新聞熱點
疑難解答