[SQL]Compression

[SQL]Compression

SQL Server 從 2008 的版本起,就有提供壓縮的功能,一種是資料壓縮,一種是備份壓縮

 

資料壓縮主要是可以針對 Table 的資料列或者是索引壓縮,簡單的說就是資料在存到 DataFile 之前就把資料給壓縮存放,減少 DataFile 的檔案大小並減少硬體的 I/O 存取;相對來說,當資料從 DataFile 取出的時候,就會增加一些 CPU 和記憶體來做解壓縮的處理。備份壓縮則只有發生在當你要備份的時候才啟用壓縮功能,而對日常操作則沒有任何影響。

 

或許是因為這兩個功能只有 Enterprise 版本才有提供( 備份壓縮原本在 SQL 2008 版本只是 Enterprise 才有提供;但從 SQL 2008R2 開始,已經開放 Standard 版本也可以使用 ),因此遇到的許多朋友和客戶,都沒有使用這樣的功能 ( 甚至有些買 Enterprise 版本的企業,也都只是因為 CPU 和 Memory 需要量比較大才購買的 )。最近幫忙一個客戶做一些資料庫健檢的工作,也有實做到一些數據,提供給大家分享一下。

 

當設定資料壓縮的時候,我們可以對資料列選擇 Page 或者是 Row 壓縮的方式,下表示我將客戶的主要大的 Table 前幾個比較大的作 Row 壓縮,原本這六個 Table 佔了大約 160G 的空間,當壓縮完畢設定之後就只需要 46G 了,大約壓縮成為原本的 30% 的大小。而在這樣設定之後,雖然部分作業在對這幾個 Table 處理的時候會讓 Server 的 CPU 增加 5% 左右,但存取速度因為 I/O 量減少,也有稍微提升的現象。

Compress001

 

而在備份壓縮部分,不管資料庫是否有 Table 設定資料壓縮,都還是有再壓縮的空間,而在備份的時間上面,可能是因為我的存放裝置是一個 NAS,是由五顆 SATA 硬碟做的 RAID,因此原本備份 240G 的時候大約花費 1.5 hr 的時間;而在使用備份壓縮之後,就只需要 45 分鐘的時間了。

Compress002

 

配合上述資料壓縮和備份壓縮調整的時候,我們也配合將原本的 DataFile 按照資料的特性區分到數個 FileGroup 內,並且考慮到 Server 的 CPU 數量,將原本只有單一個的 DataFile,增加為一個 FileGroup 下面有 3 個 DataFile。當作上述相關調整之後,一些資料庫例行的使用和維護上,在效能上都有一些不錯的改善。而這些的改變,並不需要在資料庫應用程式上做語法或者是指令上的調整,算是一種蠻便利且安全的方式。如果有朋友遇到類似的情況時,不妨參考看看。