首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2008 全新壓縮架構深度解析:列級、頁級、備份壓縮與 vardecimal 演進

     編輯:關於SqlServer

SQL Server 2008 的壓縮技術不再只是儲存格式變更,而是徹底重新設計了資料列與資料頁的底層結構。本文深入剖析列級壓縮、頁級壓縮(前綴+字典)、備份壓縮的運作機制與效能權衡。

從 vardecimal 到全新 Row/Page 格式

SQL 2005 引入 vardecimal 儲存格式(企業版/開發版),本質是數值型的 varchar 版本。SQL 2008 則更進一步:啟用壓縮(ROW 或 PAGE)時,底層 Row/Page 格式完全不同於傳統格式。儲存引擎是唯一需識別新格式的元件,其他元件(查詢處理器、鎖管理器等)不受影響,故開發週期大幅縮短。

列級壓縮

  • 中繼資料壓縮: 每欄位長度資訊從 2 bytes 降為 3 bits。
  • 數值動態儲存: 整數型依實際值大小動態佔用 1~4 bytes(如值 1 僅 1 byte,大值最多 4 bytes)。
  • 定長型別變長化: CHAR(100) 存「A」僅佔 1 byte + 中繼資料,不再佔 100 bytes。

頁級壓縮 = 列級壓縮 + 前綴壓縮 + 字典壓縮

欄位前綴壓縮

同一頁面內,同一欄位值若有共同前綴,僅儲存一次前綴,各列以指標參考:

原始值:'Chad', 'Chadwick', 'Chadly', 'Chad', 'Chadster', 'Chadwick', 'Chadly'
前綴 'Chad' 存入 CI 結構
壓縮後:'', '1wick', '1ly', '', '1ster', '1wick', '1ly'  ('1' 代表前綴參考)

頁字典壓縮

對頁面內重複值建立字典編碼:

字典:'1ly'→2, '1wick'→3
行內值:'', '2', '3', '', '1ster', '3', '2'
原本 ~25 bytes → 壓縮後 ~17 bytes(節省 30%+)

關鍵機制: 每頁獨立壓縮,前綴與字典存於頁內。頁面填滿達臨界點才觸發壓縮,避免半頁壓縮無意義。

效能權衡

指標影響
CPU 使用率上升(壓縮/解壓運算)
I/O 使用率大幅下降(資料量縮減)
記憶體佔用下降(緩衝區容納更多資料頁)
查詢效能通常提升(I/O 節省 > CPU 成本),視工作負載而定

備份壓縮

  • 採用檔案系統級通用壓縮演算法(非資料頁感知)。
  • 資料庫層級開啟/關閉,無細部調整參數。
  • 非企業版可還原壓縮備份,壓縮功能為企業版專屬。

版本限制

所有壓縮功能(列級、頁級、備份、vardecimal)極可能僅限企業版與開發版。標準版不支援。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved