SQL Server 2008中的数据压缩功能

2016-02-19 16:01 2 1 收藏

下面请跟着图老师小编一起来了解下SQL Server 2008中的数据压缩功能,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

【 tulaoshi.com - 编程语言 】

  SQL Server 2005 SP2为我们带来了vardecimal功能,这项功能使得原来定长的decimal数据在数据文件中以可变长的格式存储,据称这项功能可以为典型的数据仓库节省30%的空间,而SQL Server 2008在这一基础上又进一步增强了数据压缩功能。SQL Server 2008现在支持行压缩和页面压缩两种选项,数据压缩选项可以在以下对象上启用:

  未创建聚簇索引的表

  创建聚簇索引的表

  非聚簇索引(对表设置压缩选项不会影响到该表上的非聚簇索引,因此聚簇索引的压缩需要单独设置)

  索引视图

  分区表和分区索引中的单个分区

  为什么需要数据压缩

  首先可能需要讨论的问题就是为什么在存储成本不断降低的今天,微软还要煞费苦心地在SQL Server中实现并且不断改进数据压缩技术呢?

  尽管存储成本已经不再是传统意义上的首要考虑因素,但是这并不代表数据库尺寸不是一个问题,因为数据库尺寸除了会影响到存储成本之外,还极大地关联到管理成本和性能问题。

  首先我们来讨论为什么会有管理成本的问题?因为数据库需要备份,数据库的尺寸越大,那么备份时间就会越长,当然另外一点就是消耗的备份硬件成本也会随之提高(包括需要的备份介质成本和为了满足备份窗口而需要更高级的备份设备带来的采购成本),还有一种管理成本就是数据库的维护成本,例如我们经常需要完成的DBCC任务,数据库尺寸越大,我们就需要更多的时间来完成这些任务。

  接着我们再看看性能问题。SQL Server在扫描磁盘读取数据的时候都是按照数据页为单位进行读取的,因此如果一张数据页中包含的数据行数越多,SQL Server在一次数据页IO中获得的数据就会越多,这样也就带来了性能的提升。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  最后考虑存储的成本,按照原先SQL Server 2005 SP2中vardecimal的压缩数据为例,30%的空间节省也就意味着30%的存储成本,而按照SQL Server 2008当前放出的测试数据,采用新的数据压缩技术可以达到2X-7X的存储率,再加上如果企业要考虑容灾而增加的存储空间,这样节省的存储硬件成本也将是想当可观的。

  如何使用数据压缩

  SQL Server 2008中的压缩选项可以在创建表或索引时通过Option进行设置,例如:
     CREATE TABLE TestTable (col1 int, col2 varchar(200)) WITH (DATA_COMPRESSION = ROW);

  如果需要改变一个分区的压缩选项,则可以用以下语句:
     ALTER TABLE TestTable REBUILD PARTITION = 1 WITH (DATA COMPRESSION = PAGE);

  如果需要为分区表的各个分区设置不同的压缩选项,可以使用以下的语句:(SQL Server 2008可以对不同的分区使用不同的压缩选项,这一点对于数据仓库应用是非常重要的,因为数据仓库的事实表通常都会有一个或数个热分区,这些分区中的数据经常需要更新,为了避免数据压缩给这些分区上的数据更新带来额外的处理载荷,可以对这些分区关闭压缩选项)
     CREATE TABLE PartitionedTable (col1 int, col2 varchar(200))
    ON PS1 (col1)
    WITH (
    DATA_COMPRESSION = ROW ON PARTITIONS(1),
    DATA_COMPRESSION = PAGE ON PARTITION(2 TO 4));

  如果是为某个索引设置压缩选项的话,可以使用:

     CREATE INDEX IX_TestTable_Col1 ON TestTable (Col1) WITH (DATA_COMPRESSION = ROW);

  如果是修改某个索引的压缩选项,可以使用:
     ALTER INDEX IX_TestTable_Col1 ON TestTable REBUILD WITH (DATA_COMPRESSION = ROW);

  SQL Server 2008同时还提供了一个名为sp_estimate_data_compression_savings存储过程帮助DBA估计激活压缩选项后对象尺寸。

  数据压缩是怎样工作的

  对于行压缩,SQL Server 2008采用以下三种方法来节省存储空间:

  减少了与记录相关联的元数据开销。此元数据为有关列、列长度和偏移量的信息。在某些情况下,元数据开销可能大于旧的存储格式。

  它对于数值类型(例如,integer、decimal和float)和基于数值的类型(例如,datetime和money)使用可变长度存储格式。

  它通过使用不存储空字符的可变长度格式来存储定长字符串。

  对于页面压缩,SQL Server 2008则是在一张数据页面上依次采用:

  行压缩

  前缀压缩

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  字典压缩

  配置数据压缩功能需要注意的

  尽管SQL Server 2008的数据压缩功能非常有价值,但是仍然需要注意一些问题:

  数据压缩功能仅在企业版和开发版中可用

  数据压缩可以让一张数据页存储更多的数据行,但是并不能改变单行数据最长8060字节这一限制

  在一张已经设置了数据压缩的表上创建聚簇索引时,聚簇索引默认继承原表上的压缩选项

  在未设置聚簇索引的表上设置页面压缩时,只有以下情况才会获得页面压缩的实际效果:

  数据使用BULK INSERT语法添加到表中

  数据使用INSERT INTO ... WITH (TABLOCK)语法添加到表中

  执行带有页面压缩选项的ALTER TABLE ... REBUILD命令

  在未设置聚簇索引的表上更改压缩选项,会导致该表上所有非聚簇索引都需要重建,因为这些非聚簇索引指向的数据行地址已经都发生了改变。

  在改变压缩选项时所需要的临时空间大小与创建索引是所需要的空间是一样的,因此对于分区表,我们可以逐个分区设置压缩选项来减少临时空间的需求压力。

  由于SQL Server 2008中数据压缩技术其实是SQL Server 2005 SP2中vardecimal技术的一个超集,因此设置了数据压缩后就没有必要保留vardecimal了。当然SQL Server 2008为了保持向后兼容性,在当前版本中仍然保留了vardecimal,但是SQL Server 2008的下一个版本及可能就会弃用vardecimal选项,因此做了这些设置的数据库应该尽早改变到数据压缩设置下。

  SQL Server 2008的压缩选项是工作在存储引擎层的,对于SQL Server的其他部件来说这一特性是透明的,因此当我们用BULK LOAD的方式将外面的数据导入SQL Server时,会显著的增加CPU的工作载荷,同时将以压缩的数据表导出到外部文件时,可能会消耗比原来多很多的空间。

来源:http://www.tulaoshi.com/n/20160219/1610904.html

延伸阅读
标签: 服务器
SQL Server 2008 如何备份、还原数据库   SQL Server 2008 备份数据库: 1.打开SQL , 找到要备份的数据库 , 右键 任务 备份 2.弹出 [ 备份数据库对话框 ] ,如图:   3.点击添加 [ 按钮 ] . 如下图:   4.选择要备份的路径 和 备份的文件名 点击 [ 确定 ]. 5.然后就一直点击确定就可以了 . ...
标签: 电脑入门
1、 直接压缩法:选中需要的压缩的文件,然后右击选择发送到 --压缩(zippde)文件夹。 2、 间接压缩法:在桌面或文件窗口空白处右击鼠标,选择新建 --压缩(zippde)文件夹,然后给该压缩包起好名字,最后将要压缩的文件或文件夹拖放到压缩包中即可。 3、 在Windows XP中,如果没有安装第三方解压缩软件,ZIP形式的文件会以一个带拉链的文件夹形...
一、SQL Profiler工具简介 SQL Profiler是一个图形界面和一组系统存储过程,其作用如下: 1.图形化监视SQL Server查询; 2.在后台收集查询信息; 3.分析性能; 4.诊断像死锁之类的问题; 5.调试T-SQL语句; 6.模拟重放SQL Server活动; 也可以使用SQL Profiler捕捉在SQL Server实例上执行的活动。这样的活动被称为Profiler跟踪。 ...
SQL Server 的数据库引擎组件是用于存储、处理数据和保证数据安全的核心服务。数据库引擎提供受控的访问和快速事务处理,以满足企业中要求极高、大量使用数据的应用程序的要求。 SQL Server 支持在同一台计算机上最多存在 50 个数据库引擎实例。对于本地安装,必须以管理员身份运行安装程序。如果从远程共享安装 SQL Server,则必须使用对远程...
最近做的一个项目要获取存在于其他服务器的一些数据,为了安全起见,采用由其他“服务器”向我们服务器推送的方式实现。我们服务器使用的是sql server 2008 R2,其他“服务器”使用的都是SQL Server 2000,还都是运行在Windows XP上的,整个过程遇到了一些问题,也参考了一些文档,最终费了好多事才算搞定。 SQLServer 2000的复制服务包括...

经验教程

189

收藏

94
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部