2017-05-03 61 views
0

根據微軟的文檔here它說,如果你調用下面的命令在SQL Server中,有什麼理由使用帶有'NOTRUNCATE'參數的DBCC SHRINKDATABASE?

DBCC SHRINKDATABASE(N'MyDb', NOTRUNCATE) 

,由於NOTRUNCATE參數傳遞的是騰出空間不會返回到OS,因此會出現該數據庫是沒有縮小/修改。此外,文檔指出,物理文件大小不會改變。那麼,爲什麼你做任何事情,但

DBCC SHRINKDATABASE(N'MyDb', 20) --20 is the percentage of free space that you want left in the database file after the database has been shrunk 

DBCC SHRINKDATABASE(N'MyDb') 

是不縮水,以釋放內存數據庫的整點?我在這裏錯過了什麼?

+0

我相信通過閱讀您提供的鏈接,就像在磁盤驅動器上進行碎片整理(是的,我是舊的)。它將分配的頁面移動到文件的前面以分配未分配的空間,但保持空間不變而不縮小。 –

+0

雖然要清楚這可能會導致大量的索引碎片,因爲頁面被移出按鍵順序。 –

回答

1

我開始寫回復,但相信我自己的論點沒有道理。然後,我又有了一個想法,開始寫下這個想法,並再次將自己說出來。這是第三次,並再次無法合理化NOTRUNCATE

不放棄文件空間的唯一好處是,如果你知道你只是想抓住它 - 在這種情況下,爲什麼要打擾SHRINKDATABASE?堅持重建索引來碎片整理表,而不會縮小數據庫文件(這可能會並且會重新對錶格進行碎片整理),並且比收縮會產生更好的結果。所以,不,我不知道你爲什麼要這樣做。

相關問題