写点什么

SQL Server 2008 的新压缩特性

2007 年 11 月 17 日

关于 SQL Server 压缩的故事,最早是从 SQL Server 2005 开始的,在企业版和开发版中增加了一种叫做 vardecimal 的新存储格式,这个表级的选项会影响到 decimal 和 numeric 字段。当对值的精度要求低于字段可用精度,如在一个 decimal(18,9)类型的字段中存储 1.5 这个数值时,存储上就需要有相应的压缩。从效果上来看,它就是一个 varchar 类型的数字型版本。

SQL Server 2008 所包含的已远不止这些小技巧, Chad Boyd 写到

无论从哪方面来看,SQL Server 2008 的数据压缩都与现在有着巨大的差异(尽管它依然支持或者说包括 vardecimal 类型)——引起这种差异的真像是,如果你对一个给定的 table/index 启用压缩功能,那么底层的 row/page 格式将不再相同——是的,就是这样,你听得没错——如果你使用压缩(ROW 或者 PAGE),那么 SQL 2008 的 row/page 格式将不同于现有的格式(如果你只是在 table/index 上使用压缩的话)。因此,在 SQL 2008 中,有两种,没错,是两种可选 row/page 数据格式。你现在可能会想知道“那么,如果 row/page 格式改变了,那你们究竟是如何在这么短的时间内,依然有足够的时间去重新生成 SQL Server 所有需要识别这些格式的组件的呢?”答案就是我们不需要那样做——因为 Storage Engine 是 SQL 2008 中唯一一个需要知道新的 row/page 格式的组件。

行级压缩将大幅减少元数据所需的变量长度,较以前每个字段需要花费 2 个字节来存储,现在只要仅仅 3 个位。字段本身现在也变得更小,在整型字段中存储像 1 这样的数值,只需要一个字节,而大数值则最多只需要 4 个字节。

行级压缩则允许在行间共享共有数据。Chad 首先谈到的两种技术就是列前缀和页字典:

假设你在一页的数据行中有一列数据有这些值:‘Chad’、‘Chadwick’、‘Chadly’、‘Chad’、‘Chadster’、‘Chadwick’和‘Chadly’(故意重复的数值)——正如你所见,有相当多的冗余‘前缀’数据在这一页的同一列的不同行中,是吧?因此,你最终可能会想到这样的一个场景:将列的前缀‘Chad’存储在 CI 结构中,每一个列的最后都指向这个前缀值,最后出现在磁盘上的值会像这样:‘’,‘1wick’,‘1ly’,‘1ster’,‘1wick’和‘1ly’。

所以,对于上述例子中的含有 Chad 的同列数值,在经过对“列前缀”值进行计算和存储后,你可能得到一个会含有如‘1ly’和‘1wick’这些值的页字典,而真正行内数值则极有可能看上去像这样:‘’、‘2’、‘3’、‘’、‘1ster’、‘3’和‘2’。通过这种方式,我们让原本需要大约 25 个字节来存储的行数据,减少到只要大约 17 个字节来存储,节省 30%以上。

每一个页都是单独压缩的,前缀和字典也存储在页内。由于页是存储分配的原子单位,将半页压缩到四分之一页是没有任何意义的,所以,只有在页的内容快满的时候才会开始压缩处理。

在使用行和页压缩时还有一个性能权衡问题,因为 CPU 使用率会上升,但 I/O 使用率和内存占用会下降。

Backup Compression 是 2008 的另一个特性,它是通过普通的文件系统型压缩技术实现的,对于给定的数据库,只有启用或者禁用,没有其它可调节选项。

尽管非企业版服务器可以恢复带压缩的备份,但这所有的压缩选项极有可能成为企业版专享选项。

查看英文原文 New Compression Features in SQL Server 2008

2007 年 11 月 17 日 22:54254
用户头像

发布了 89 篇内容, 共 96425 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

重点人员管控监控平台建设,重点人口预警系统开发方案

WX13823153201

iOS面试--拼多多最新iOS开发面试题

一意孤行的程序员

ios swift 面试 ios开发 知识分享

字节跳动Java岗一二三面全经过分享

北游学Java

Java 字节跳动 面试

每个开发人员都应该知道的 10 个 GitHub 仓库

LeanCloud

GitHub web开发

玩转直播系列之消息模块演进(3)

vivo互联网技术

Java 服务器 消息系统 直播技术

Gartner中文电子书:深度剖析数字化加速

Geek_bacee5

Gartner Gartner中文电子书 深度剖析数字化加速 数字化进程的指南 gartner中国

阿里云原生开源大家族加入中科院软件所开源软件供应链点亮计 - 暑期 2021

阿里巴巴云原生

开源 容器 微服务 开发者 云原生

我粉了!阿里大牛从内部带出来的百亿级高并发系统,从基础到实战、面面俱到

云流

Java 程序员 架构 面试

ETL-KETTLE工具使用

this

Java 数据 数据同步 ETL

Kubernetes 普及系列:容器基础入门

CODING DevOps

Kubernetes

阿里P9架构师强烈推荐:想拿60W以上年薪必看,Java高并发四套小册。

Java架构追梦

Java 阿里巴巴 架构 面试 高并发

华为18级工程师十年之作,整整3625页互联网大厂面试题合集

周老师

Java 编程 程序员 架构 面试

参与 Apache 顶级开源项目的 N 种方式,Apache Dubbo Samples SIG 成立!

阿里巴巴云原生

开源 开发者 云原生 dubbo 中间件

首届HarmonyOS开发者创新大赛颁奖典礼于深圳召开

科技汇

百度智能小程序框架性能优化实践(上)

百度开发者中心

百度智能小程序 百度

2021 DevOpsDays 东京站完美收官 | CODING 专家受邀分享最新技术资讯

CODING DevOps

CI/CD DevOpsDays CODING DevOps

老生常谈:面试必问“三次握手,四次挥手”这么讲,保证你忘不了

程序员小毕

Java 程序员 面试 TCP 网络

fil挖矿步骤教程是什么?fil挖矿规则是什么?

投资矿机v:IPFS1234

fil挖矿步骤教程是什么 fil挖矿规则是什么

记十亿级Es数据迁移mongodb成本节省及性能优化实践

杨亚洲(专注mongodb及高性能中间件)

MySQL 数据库 mongodb 架构 分布式数据库mongodb

并发王者课 - 青铜 3: 双刃剑-理解多线程带来的安全问题

秦二爷

Java 多线程 并发 王者并发课

Spark知识点简单总结

五分钟学大数据

大数据 spark 5月日更

Hive窗口函数与分析函数

大数据技术指南

hive 5月日更

做一次黑客,入侵一次服务器

叫我阿柒啊

Docker 入侵 docker远程 redis注入

ipfs矿机怎么组装?ipfs矿机合法吗?

v:IPFS456

ipfs矿机怎么组装? ipfs矿机合法吗?

仰望天空,脚踏实地 —— CODING OKR 全新上线

CODING DevOps

团队管理 OKR

推荐计划 | 推荐好友用 CODING,获高额返现奖励

CODING DevOps

团队管理 敏捷开发 研发工具 开发团队

MindSpore:不用摘口罩也知道你是谁

华为云开发者社区

算法 人脸识别 口罩 mindspore 口罩人脸

腾讯T4一年心血成就17W字操作系统、网络教程(导图+笔记)

周老师

Java 编程 程序员 架构 面试

活久见!22张图带你maven实战通关,GitHub上线1小时浏览量破万

java专业爱好者

Java

量化马丁策略交易系统开发app,现货量化交易平台搭建

WX13823153201

飞猪基于 Serverless 的云+端实践与思考

阿里巴巴云原生

Serverless 容器 运维 云原生 监控

「中国技术开放日·长沙站」现场直播

「中国技术开放日·长沙站」现场直播

SQL Server 2008的新压缩特性-InfoQ