[SQL SERVER][Performance]善用資料壓縮#簡介
前言:
資料壓縮技術是SQL2008的新特性(Enterprise或developer 版本),而早在SQL2005已有相關雛形應用,
SQL2005的資料表屬性多了一個VarDecimal 儲存格式,這個唯讀值若是 True,
表示 decimal 和 numeric 資料類型是使用 VarDecimal 儲存格式來儲存,
如decimal(10,3)類型中儲存12.1這數值時,儲存時就會有資料列壓縮的效果(有點像varchar類型)。
而在SQL2008所包含的資料壓縮技術,已有顯著改善和巨大差異。
簡介:
SQL2008資料壓縮技術分兩大類型,資料列壓縮和頁面壓縮,兩者差異Books Online介紹還滿詳細的。
資料列壓縮:
頁面壓縮:
Note:當啟用頁面壓縮時,Books Online有提到一個重點,就是何時發生頁面壓縮?
大致上是檢查頁面是否填滿(filled)來判斷處理,如果新增資料在一頁面時因為頁面還未填滿(資料大小不足),所以會先進行資料列壓縮,
直到該頁面填滿時,才發生頁面壓縮這時才能取得相關頁面壓縮優點,換句話說,頁面壓縮其實也包含了資料列壓縮,
所以頁面壓縮的比率一定會大於資料列壓縮,但相對所花費的壓縮時間也一定比資料列壓縮來的長。
我需要資料壓縮嗎?
一般來說資料壓縮技術可大量降低 IO讀取、memory(data buffer)、Storage space和Network傳輸量的大小,
雖然會更耗費CPU資源(整體時間變長),但這樣的投資報酬率個人認為還滿值得的,可以實際應用在真實世界中。
更多相關考量可以查看Book Online說明。
如何預估壓縮所節省空間?
若要判斷變更壓縮狀態如何影響資料表或索引,可使用 sp_estimate_data_compression_savings 預存程序。
下篇我將實做資料列和頁面壓縮技術。
參考