数据压缩是对存储和性能优势的加强。减少数据库占用的磁盘空间量将减少整体数据文件存储空间,在一下几个方面增加吞吐量:

1.更好的I/O利用率,每个页面可以读写更多的数据。

2.更好的内存利用率,缓冲区可以缓存更多的数据。

3.减少页面的闭锁,每个页面可以包含更多数据。

由于数据压缩必须考虑I/O和CPU之间的平衡,压缩和解压缩都需要CPU处理。因此数据压缩对于旧数据和不经常查询的数据更有意义。

这里我们主讨论两种压缩:一是行压缩;二是页面压缩。

行压缩:压缩可以改变格式的存储固定值数据类型--也就说包含一个字节的值的4字节列可以压缩为1字节,1字节的列不能再压缩,但是null和0值不占字节。

语法:创建 createtable表名()with(DATA_COMPERSSION=ROW)

添加 ALTER TABLE表名REBUILD with(DATA_COMPERSSION=ROW)

页面压缩:页面压缩在实现行压缩的前提下,还实现了两种压缩,一是前缀压缩(对于每个页面和列来说前缀值都是相同的,可用来减少存储的需求,通过引用来取代重复的前缀);二是字典压缩(搜索页面中的重复值,这被对CI的引用取代)。

语法:创建 createtable表名()with(DATA_COMPERSSION=PAGE)

添加 ALTER TABLE表名REBUILD with(DATA_COMPERSSION=PAGE)

估计节省空间:语法sp_estimate_data_compression_savings

[@schema_name=]--架构名称

, [@object_name=]--有索引的表或者索引视图的名称。

, [@index_name=]--索引ID号

, [@partition_number=]--对象分区号,null表示非分区

, [@data_compression=]--压缩类型(none\row\page)

[;]

监控数据压缩:windows性能监视的sqlserver:access method对象中有两个计数器:

Page compression attempts/sec:计算每秒进行页面压缩尝试的次数;

Pages compressed/sec:计算每秒压缩的页面数。

最后还要注意数据压缩的注意事项:

1.启用和禁用表或群集索引压缩会重构所有费群集索引。

2.不能在稀疏列中使用压缩。

3.超出行的LOB不能压缩。

4.索引中的非叶子也只能使用行压缩进行压缩。

5.非群集索引不继承标的压缩设置。

6.再删除群集索引时,表将保持这些压缩设置。

7.除非特别指定,创建群集索引将继承表的压缩设置。

总结:我们已经了解了基本的使用方式和一些注意事项,通过压缩实现高性能的数据库系统。同时我们还要兼顾一些硬件成本,最后我们还要注意的是对于高可用性系统,改变压缩设置可能会产生额外的事务日志操作。

dawei

【声明】:丽水站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。