SQL Server:“數據收縮”詳解


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即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM