转:数据库收缩
1. 數(shù)據(jù)庫的相關(guān)屬性
在MS中創(chuàng)建數(shù)據(jù)庫時(shí)會(huì)為數(shù)據(jù)庫分配初始的大小(如下圖:數(shù)據(jù)庫和日志兩個(gè)文件),隨著數(shù)據(jù)庫的使用文件會(huì)逐漸增大。數(shù)據(jù)庫文件大小的增加有兩種方式:
- 自動(dòng)增長:在自動(dòng)增長中可以設(shè)置每次的增長量,以及最大增長的文件大小。
- 手動(dòng)增長:取消“啟用自動(dòng)增長”則為手動(dòng)增長,這就需要DBA經(jīng)常觀測數(shù)據(jù)庫的運(yùn)行情況,及時(shí)更改數(shù)據(jù)庫的小。手動(dòng)增長比較麻煩,一般都設(shè)為自動(dòng)增長。
2. 為何數(shù)據(jù)庫需要收縮?
要明白為何數(shù)據(jù)庫需要收縮,首先需要理解兩個(gè)概念:
- 為數(shù)據(jù)庫分配的空間:如上圖初始時(shí)為“數(shù)據(jù)庫文件”分配的空間為3MB,為“日志文件”分配的空間未1MB。
- 數(shù)據(jù)庫實(shí)際使用的空間:以上圖為例,由于數(shù)據(jù)是剛創(chuàng)建的,里面沒有任何用戶數(shù)據(jù),因此它實(shí)際使用的空間很小(不足1MB)。
由此可以理解為:分配空間>=使用空間。在實(shí)際使用的過程中可能會(huì)出現(xiàn)分配空間為100MB,而使用空間僅為20MB,這就造成了磁盤有80MB的浪費(fèi),為了消除這種浪費(fèi)就需要使用“數(shù)據(jù)收縮”功能。
3. 如何收縮數(shù)據(jù)庫?
3.1 通過設(shè)置數(shù)據(jù)庫選項(xiàng)AUTO_SHRINK為True,即讓數(shù)據(jù)庫自動(dòng)收縮,如下圖:
3.2 收縮數(shù)據(jù)庫文件
右鍵數(shù)據(jù)庫—任務(wù)—收縮—文件,如下圖:
文件類型:選擇所要收縮的是“數(shù)據(jù)庫文件”還是“日志文件”。
當(dāng)前分配的空間:數(shù)據(jù)庫為該文件分配的大小,就是在磁盤上看到的文件大小。
可用空間:就是“當(dāng)前分配的空間” 減去“實(shí)際使用的空間”。
收縮操作:
? ?① 釋放未使用的空間:將該文件中未使用的空間釋放出來,數(shù)據(jù)在文件中不移動(dòng);
? ?② 在釋放未使用的空間前重新組織頁:此選項(xiàng)可以將文件收縮到“指定大小”,并將數(shù)據(jù)重新組織。其最小值為數(shù)據(jù)庫“實(shí)際使用的空間”;
? ?③ 通過將數(shù)據(jù)遷移到同一文件組的其他文件來清空文件:不解釋,很少用。
上述操作也可以使用T-SQL替代:
DBCC ShrinkFile(‘?dāng)?shù)據(jù)庫名’, targetsize); /* 收縮數(shù)據(jù)庫文件 */ DBCC ShrinkFile(‘?dāng)?shù)據(jù)庫名_log’, targetsize); /* 收縮日志文件 */Targetsize:單位為兆,必須為整數(shù),DBCC SHRINKFILE 嘗試將文件收縮到指定大小。
DBCC SHRINKFILE 不會(huì)將文件收縮到小于“實(shí)際使用的空間”大小,例如“分配空間”為10M,“實(shí)際使用空間”為6M,當(dāng)制定targetsize為1時(shí),則將該文件收縮到6M,不會(huì)將文件收縮到1M。
3.3 收縮數(shù)據(jù)庫
即同時(shí)收縮“數(shù)據(jù)庫文件”和“日志文件”,右鍵數(shù)據(jù)庫—任務(wù)—收縮—數(shù)據(jù)庫
收縮后的最大可用空間:設(shè)為0,即收縮所有的可用空間。
也可以使用T-SQL完成數(shù)據(jù)庫的收縮:
DBCC SHRINKDATABASE(數(shù)據(jù)庫名,百分比)百分比:即“收縮后文件中的最大可用空間”,取值范圍“大于等于0, 小于100%”,實(shí)際使用中設(shè)為0即可。
轉(zhuǎn)載于:https://www.cnblogs.com/jearay/p/8571787.html
總結(jié)
- 上一篇: INNODB表快速迁移
- 下一篇: 数据库MySQL/mariadb知识点—