sql server 資料庫收縮

yinghualeihenmei發表於2024-10-18

原文連結:https://www.cnblogs.com/lgx5/p/17080302.html

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

相關文章