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

SQL Server 2008 數據壓縮深度解析:行/頁壓縮、vardecimal、備份壓縮與權衡

     編輯:關於SqlServer

SQL Server 2008 引入革命性的行級/頁級壓縮,底層 Row/Page 格式重寫,存儲引擎層透明實現,無需應用改造。本文深度剖析壓縮原理、空間節省實測、CPU/I/O 權衡、vardecimal 演進、備份壓縮與版本限制。

演進脈絡:vardecimal → 行/頁壓縮

  • SQL 2005 SP2:vardecimal 存儲格式 (表級),針對 decimal/numeric 低精度值壓縮,類似「數字版 VARCHAR」。
  • SQL 2008:通用行/頁壓縮框架,vardecimal 併入為行壓縮子集,支持所有定長/變長類型,元數據開銷大幅降低。

行壓縮:元數據極致精簡 + 定長類型變長化

  • 元數據開銷:每列從 2 字節降至 3 位 (null bitmap + 變長列偏移量優化)。
  • 數值類型動態存儲:
    類型值範例非壓縮行壓縮
    TINYINT11 字節1 字節
    SMALLINT12 字節1 字節
    INT14 字節1 字節
    BIGINT18 字節1 字節
    DECIMAL(18,9)1.59 字節~3 字節
  • 字符類型:CHAR(n) 按實際長度存儲 (去除尾部空格),VARCHAR 無額外收益。

頁壓縮:行壓縮 + 列前綴去重 + 頁字典編碼

在單頁 (8KB) 範圍內識別重複模式:

  1. 列前綴:同一列多行共享公共前綴。
    例:'Chad', 'Chadwick', 'Chadly', 'Chadster' → 存儲前綴 'Chad',行內存 '', '1wick', '1ly', '1ster'。
  2. 頁字典:對重複值分配短代碼。
    上例進一步:字典 1='wick', 2='ly', 3='ster' → 行內存 '', '2', '3', '1'。

實測效果:典型 OLTP 表 40-60% 空間節省;數據倉庫維度表 60-80%;日志表 30-50%。

壓縮粒度與啟用語法

對象語法說明
堆表ALTER TABLE T REBUILD WITH (DATA_COMPRESSION = ROW/PAGE)需重建,排他鎖 (ONLINE=ON 可緩解)
聚簇索引ALTER INDEX PK_T ON T REBUILD WITH (DATA_COMPRESSION = PAGE)葉級即數據頁,效果最顯著
非聚簇索引ALTER INDEX IX_T_C ON T REBUILD WITH (DATA_COMPRESSION = ROW)獨立於基表壓縮設置
分區表ALTER INDEX ... REBUILD PARTITION = 5 WITH (DATA_COMPRESSION = PAGE)分區級獨立控制,滑動窗口歸檔壓縮

CPU/I/O/內存 三角權衡

指標行壓縮頁壓縮
CPU 開銷+5-15% (解壓/壓縮)+15-30% (字典編碼/解碼)
I/O 讀取-40-60% (頁數減少)-50-80%
緩存命中率顯著提升 (更多熱頁驻留)極大提升
寫入延遲微增明顯增 (頁分裂時重建字典)

決策建議:CPU 閒置、I/O 瓶頸、讀多寫少 → 頁壓縮;CPU 緊張、寫入頻繁 → 行壓縮;只讀/歸檔數據 → 頁壓縮極致。

備份壓縮:獨立特性

  • BACKUP DATABASE ... WITH COMPRESSION:文件系統級流式壓縮 (類似 GZIP),不依賴行/頁壓縮。
  • 全庫級開關,無細粒度參數。Enterprise/Standard (2014+) 支持備份壓縮,所有版本可還原壓縮備份。
  • 備份速度通常提升 2-3 倍 (I/O 為瓶頸時),文件體積 60-80% 原始大小。

版本限制 (關鍵)

  • 行/頁壓縮:Enterprise / Developer / Evaluation 專有。Standard/Web/Express 不支持創建**,但可還原/附加包含壓縮對象的數據庫 (只讀訪問)。
  • 備份壓縮:Enterprise (2008+) / Standard (2014+) 支持創建。

最佳實踐清單

  1. 使用 sp_estimate_data_compression_savings 預估節省空間與壓縮比。
  2. 優先對大表聚簇索引啟用頁壓縮,非聚簇索引啟用行壓縮。
  3. 分區表歷史分區頁壓縮,熱分區行壓縮或無壓縮。
  4. 維護窗口 ONLINE=ON, MAXDOP=... 重建啟用壓縮。
  5. 監控 sys.dm_db_index_physical_stats 碎片與 sys.dm_os_performance_counters CPU/緩存命中率。
  6. 備份常規啟用 WITH COMPRESSION,異地傳輸帶寬節省 60%+。

SQL Server 2008 壓縮技術將「存儲成本」與「查詢性能」雙贏:I/O 降維打擊 CPU,緩存容量實質擴大。在 CPU 富餘的現代硬件上,頁壓縮已成為大型數據倉庫與歸檔表的標配選項。

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