SQLServer2008的新压缩特性

SQLServer2008的新压缩特性,第1张

SQLServer2008的新压缩特性,第2张

关于SQL Server压缩的故事最早是从SQL Server 2005开始的,在企业版和开发版中加入了一种叫做vardecimal的新存储格式。该表级选项将影响小数和数值字段。当值的精度低于字段的可用精度时,例如将值1.5存储在decimal(18,9)类型的字段中,需要相应地压缩存储。实际上,它是varchar类型的数字版本。

SQL Server 2008包含的技巧远不止这些。查德·博伊德写道:

无论如何,SQL Server 2008的数据压缩与现在的大不相同(尽管它仍然支持或包含vardecimal类型)——导致这种差异的事实是,如果你为给定的表/索引启用压缩功能,那么底层的行/页格式将不再相同——是的,就是这样,你是对的——如果你使用压缩(行或页),那么SQL 2008的行/页格式将与现有格式不同(如果你只对表/索引使用压缩)。因此,在SQL 2008中,有两种,是的,两种可选的行/页数据格式。现在您可能会想,“那么,如果行/页格式被更改,您究竟如何在如此短的时间内重新生成需要识别这些格式的所有SQL Server组件?”答案是我们不需要这样做——因为存储引擎是SQL 2008中的一个组件,它需要知道新的行/页格式。

行级压缩将大大减少元数据所需的可变长度。存储每个字段需要2个字节,现在只需要3个比特。场地本身现在变小了。在整数字段中存储1这样的值只需要一个字节,而大值最多只需要四个字节。

行压缩允许在行之间共享公共数据。Chad首先谈到了两项技术:列前缀和页字典:

假设你有一列数据,在一个页面的数据行中有这些值:' Chad ',' chadwick ',' chadly ',' Chad ',' chadster ',' chadwick '和' chadly '(故意重复的值)-正如你所看到的,在这个页面的同一列中有相当多的冗余'前缀'数据。因此,您最终可能会想到这样一种情况:列的前缀' Chad '存储在CI结构中,每列的结尾都指向该前缀值,并且出现在磁盘上的最后一个值将如下所示:''、' 1wick '、' 1ly '、' 1st er '、' 1wick '和' 1ly '。

因此,对于上面示例中具有Chad的相同列值,在计算并存储列前缀值之后,您可能会得到一个包含诸如' 1ly '和' 1wick '之类的值的页字典,而实际的行内值很可能是这样的:''、' 2 '、' 3 '、''、' 1st er '、。这样我们就把原来需要25个字节左右存储的行数据减少到只有17个字节左右,节省了30%以上。

每个页面都是单独压缩的,前缀和字典也存储在页面中。因为页是存储分配的原子单位,所以压缩半页到四分之一页是没有意义的,所以压缩过程只会在页的内容快满的时候才开始。

当使用行和页压缩时,还有一个性能权衡,因为CPU使用率会增加,但I/O使用率和内存使用率会减少。

备份压缩是2008的另一个特点,通过常用的文件系统压缩技术来实现。对于给定的数据库,只能启用或禁用它,没有其他可调整的选项。

尽管非企业服务器可以使用压缩来恢复备份,但所有压缩选项都可能是企业服务器专有的。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » SQLServer2008的新压缩特性

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情