1. 數據庫的相關屬性
在MS中創建數據庫時會為數據庫分配初始的大小(如下圖:數據庫和日志兩個文件),隨着數據庫的使用文件會逐漸增大。數據庫文件大小的增加有兩種方式:
- 自動增長:在自動增長中可以設置每次的增長量,以及最大增長的文件大小。
- 手動增長:取消“啟用自動增長”則為手動增長,這就需要DBA經常觀測數據庫的運行情況,及時更改數據庫的小。手動增長比較麻煩,一般都設為自動增長。
2. 為何數據庫需要收縮?
要明白為何數據庫需要收縮,首先需要理解兩個概念:
- 為數據庫分配的空間:如上圖初始時為“數據庫文件”分配的空間為3MB,為“日志文件”分配的空間未1MB。
- 數據庫實際使用的空間:以上圖為例,由於數據是剛創建的,里面沒有任何用戶數據,因此它實際使用的空間很小(不足1MB)。
由此可以理解為:分配空間>=使用空間。在實際使用的過程中可能會出現分配空間為100MB,而使用空間僅為20MB,這就造成了磁盤有80MB的浪費,為了消除這種浪費就需要使用“數據收縮”功能。
3. 如何收縮數據庫?
3.1 通過設置數據庫選項AUTO_SHRINK為True,即讓數據庫自動收縮,如下圖:
3.2 收縮數據庫文件
右鍵數據庫—任務—收縮—文件,如下圖:
文件類型:選擇所要收縮的是“數據庫文件”還是“日志文件”。
當前分配的空間:數據庫為該文件分配的大小,就是在磁盤上看到的文件大小。
可用空間:就是“當前分配的空間” 減去“實際使用的空間”。
收縮操作:
① 釋放未使用的空間:將該文件中未使用的空間釋放出來,數據在文件中不移動;
② 在釋放未使用的空間前重新組織頁:此選項可以將文件收縮到“指定大小”,並將數據重新組織。其最小值為數據庫“實際使用的空間”;
③ 通過將數據遷移到同一文件組的其他文件來清空文件:不解釋,很少用。
上述操作也可以使用T-SQL替代:
DBCC ShrinkFile(‘數據庫名’, targetsize); /* 收縮數據庫文件 */ DBCC ShrinkFile(‘數據庫名_log’, targetsize); /* 收縮日志文件 */
Targetsize:單位為兆,必須為整數,DBCC SHRINKFILE 嘗試將文件收縮到指定大小。
DBCC SHRINKFILE 不會將文件收縮到小於“實際使用的空間”大小,例如“分配空間”為10M,“實際使用空間”為6M,當制定targetsize為1時,則將該文件收縮到6M,不會將文件收縮到1M。
3.3 收縮數據庫
即同時收縮“數據庫文件”和“日志文件”,右鍵數據庫—任務—收縮—數據庫
收縮后的最大可用空間:設為0,即收縮所有的可用空間。
也可以使用T-SQL完成數據庫的收縮:
DBCC SHRINKDATABASE(數據庫名,百分比)
百分比:即“收縮后文件中的最大可用空間”,取值范圍“大於等於0, 小於100%”,實際使用中設為0即可。