[SQL SERVER][Performance]善用資料壓縮#簡介

[SQL SERVER][Performance]善用資料壓縮#簡介

前言:

資料壓縮技術是SQL2008的新特性(Enterprise或developer 版本),而早在SQL2005已有相關雛形應用,

SQL2005的資料表屬性多了一個VarDecimal 儲存格式,這個唯讀值若是 True,

表示 decimal 和 numeric 資料類型是使用 VarDecimal 儲存格式來儲存,

如decimal(10,3)類型中儲存12.1這數值時,儲存時就會有資料列壓縮的效果(有點像varchar類型)。

而在SQL2008所包含的資料壓縮技術,已有顯著改善和巨大差異。

 

簡介:

SQL2008資料壓縮技術分兩大類型,資料列壓縮頁面壓縮,兩者差異Books Online介紹還滿詳細的。

資料列壓縮:

image

頁面壓縮:

image

Note:當啟用頁面壓縮時,Books Online有提到一個重點,就是何時發生頁面壓縮?

大致上是檢查頁面是否填滿(filled)來判斷處理,如果新增資料在一頁面時因為頁面還未填滿(資料大小不足),所以會先進行資料列壓縮,

直到該頁面填滿時,才發生頁面壓縮這時才能取得相關頁面壓縮優點,換句話說,頁面壓縮其實也包含了資料列壓縮,

所以頁面壓縮的比率一定會大於資料列壓縮,但相對所花費的壓縮時間也一定比資料列壓縮來的長。

 

我需要資料壓縮嗎?

一般來說資料壓縮技術可大量降低 IO讀取、memory(data buffer)、Storage space和Network傳輸量的大小,

雖然會更耗費CPU資源(整體時間變長),但這樣的投資報酬率個人認為還滿值得的,可以實際應用在真實世界中。

更多相關考量可以查看Book Online說明。

 

如何預估壓縮所節省空間?

若要判斷變更壓縮狀態如何影響資料表或索引,可使用 sp_estimate_data_compression_savings 預存程序。 

 

下篇我將實做資料列和頁面壓縮技術。

 

參考

建立壓縮資料表及索引

資料列壓縮實作

頁面壓縮實作