user database的initial size和dbcc shrinkfile 之前我們討論了dbcc shrinkfile改變tempdb initial size的情況。而用DBCC Shrinkfile去收縮一個user database,情況就比較簡單了。讓我們通過一些測試來說明SQL Server 收縮user database的行為。 首先創建了
user database的initial size和dbcc shrinkfile
之前我們討論了dbcc shrinkfile改變tempdb initial size的情況。而用DBCC Shrinkfile去收縮一個user database,情況就比較簡單了。讓我們通過一些測試來說明SQL Server 收縮user database的行為。
首先創建了一個數據庫,Sales_data的初始大小為3mb。 對于當前這個數據庫文件來說,它的initial size為3mb。
ON
SIZE = 3,
FILEGROWTH = 1 )
LOG ON
SIZE = 5MB
) ;
現在我們插入一些10mb數據:
,sys.columns c2
Sales_data大小變成了13mb的左右,然后執行dbcc shrinkfile來收縮數據文件,注意這里我們沒有指定要收縮到的target size:
我發現sales_data的大小變成了3mb。
結論:當數據庫實際使用的空間小于Minimum size時,在不指定 target size的情況下,dbcc shrinkfile可以將文件收縮到Minimum Size。(實際上在這個測試中的MinimumSize就是我們數據庫的initial size。)
那么我們來看看dbcc shrinkfile能否改變user database的Minimum size? 繼續下一個實驗。
執行下面的腳本,先將數據庫從3M變為13MB,然后使用dbcc shrink并指定target size為10MB。
收縮之后sales_dat變成了11mb,但Minimumsize仍然是之前的3mb。 那么是否說明dbcc shrinkfile無法改變user database的Minimum size? ? ?
繼續進行試驗:現在我們給dbcc shrinkfile命令指定target size為1MB。
試驗結果是,,數據庫的當前大小變為1.3mb, 而且MinimumSize也變成1.3mb。
我們再次插入數據擴張數據庫大小,之后再次使用dbcc shrinkfile收縮(不指定target size)。
如我們所料,這次數據庫就被收縮到了1.3mb。
結論:如果數據庫收縮后的大小仍然大于minimum size,那么minimum size不會改變。 如果收縮后數據大小小于當前的minimum size,那么minimum size變更為當前大小。
雖然dbcc shrinkfile可以返回minimumsize,但是使用這種辦法來查看minimum size顯然不是個好主意。還有其他方法查看Minimum size嗎?
答案是肯定的:
可以通過dbccfileheader得到文件的Minimum size, 請參考MinSize列。
Minimum size的值實際存儲在數據文件的第0頁中,所以我們通過dbcc page也能查看到
posted on
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com