拼吾爱程序人生

首页 » 数据库编程 » SQL Server » 在SQL Server 2008数据库中实现数据压缩
cobra - 2008-9-26 0:06:00
摘要:SQL Server 2008中有个有趣的新特性:数据压缩,利用该特性,我们可以减小数据表,索引以及分区的子集的大小。本文通过例子详细介绍如何使用该特性。

SQL Server中的数据压缩功能,最早在SQL Server 2005 SP2中出现,当时针对decimail和numeric数据类型推出了新的存储格式--vardecimal。vardecimal存储格式允许decimal和numeric数据类型的存储作为一个可变长度列。

这个概念已扩展在SQL Server 2008的所有固定长度的数据类型,如integer, char, 和 float等数据类型。借助数据压缩,减少了存储成本,并提高查询性能,减少I / O和增加缓冲点击率。

虽然SQL Server 2008 支持 vardecimal 存储格式;但是,由于行级压缩可实现同样的目标,因此在SQL Server 2008中不推荐使用 vardecimal 存储格式。

SQL Server 2008对于表和索引,同时支持行(ROW)和页面(Page)两种压缩模式。下面对这两种数据压缩类型简单做个对比:

行压缩。行压缩可以将固定长度类型存储为可变长度存储类型。例如char(100)列储存在一个可变长度存储格式将只使用了存储量所定义的数据。储存的“ SQL Server 2008 ”,压缩后只需要存放15个字符,而非全部100个字符,从而节省了85%的存储空间。这是在SQL Server 2005 Service Pack 2中提供的vardecimal存储格式的思路的延伸。同时需要注意的是,这种压缩模式,将对所有数据类型的 NULL 和 0 值进行优化,从而使它们不占用任何字节。

页面压缩模式。这种压缩功能,建立在行压缩基础之上,通过只存储一次页面上相同事件字节来将存储的冗余数据减到最小。使用页压缩压缩表和索引,除了采用行压缩,还采用了前缀压缩和字典压缩。

数据压缩会减少的大小您的表格或索引指标,最好是先评估一下压缩后所能节省的空间。,估计节省空间在一个表或索引使用,无论是sp_estimate_data_compression_savings系统存储过程还是数据压缩向导。检查过程中,如果发现现有数据的零碎程度很高,则可能需要重新生成索引(而不是使用压缩)来减小索引的大小。

1、估算压缩后可节省的存储空间

我们可以利用sp_estimate_data_compression_savings系统存储过程或者数据压缩向导可以预估出数据表或者索引可以节省的存储空间。

以下举例说明:在AdventureWorks 数据库中使用sp_estimate_data_compression_savings系统存储过程:


 附件: 您所在的用户组无法下载或查看附件

参数说明:

第一个参数是包含表或索引视图的数据库架构的名称。如果 为 NULL,则使用当前用户的默认架构。

第二个参数是索引所属的表或索引视图的名称。

第三个参数是索引的ID

第四个参数是对象中的分区号

最后一个参数是要评估的压缩的类型。

执行上面的SQL语句,我们将看到以下的执行结果:



 附件: 您所在的用户组无法下载或查看附件

图1 执行 SQL语句 后的输出结果
注意size_with_current_compression_setting(KB)和 size_with_requested_compression_setting (KB)这两个列,这两字段将告诉您 Sales.SalesOrderDetail这个表预计可节省的空间。

如果要使用数据压缩向导,右键点击Sales.SalesOrderDetail这个表,在弹出菜单中选择Storag项中的Manage Compression子项。



 附件: 您所在的用户组无法下载或查看附件

图2 数据压缩菜单
这将启动数据压缩向导。在欢迎界面中,单击“Next”,进入下一步骤。



 附件: 您所在的用户组无法下载或查看附件

图3 数据压缩向导欢迎界面
在选择压缩类型页面中,点击“Compression Type”这一列的下拉菜单,根据实际需要选择压缩类型。





(文/林善茂  出处/赛迪网)

 您可能对 [SQL Server] 的这些文章也感兴趣:

SQL Server 2005 Beta2安装及界面
SQL Server 2005 数据转换服务中的模糊查找和模糊分组(1)
大数据量下快速获取 SQL Server 数据库表记录数的方法
SQL Server 2005 Service Broker 初探(1)
如何在SQL Server中恢复数据
SQL Server 2005 数据转换服务中的模糊查找和模糊分组
Sql Server2005 Transact-SQL 学习总结之-APPLY 运算符
SQL Server应用程序中的高级SQL注入
异地、异构数据库高效率同步解决方案(新)
Sql Server2005 Transact-SQL 学习总结之-窗口函数(OVER)
cobra - 2008-9-26 0:13:00
由于执行sp_estimate_data_compression_savings系统存储过程时,我们选择了行压缩,为了便于对比,我们也选择相同选项。

选完后点击“Calculate”按钮,将看到与执行存储过程后类似的信息。



 附件: 您所在的用户组无法下载或查看附件

图4 数据压缩向导过程中选择压缩类型
这两种方法都可以预估出数据表或者索引可以节省的存储空间。

2、改变表的压缩选项

为了现有的未分区表能够支持压缩功能,需要使用ALTER TABLE 命令,带上 REBUILD 选项。



 附件: 您所在的用户组无法下载或查看附件
上面这句脚本允许sales.salesorderdetail表支持行压缩类型。

你也可以在数据压缩向导中继续往下操作,同样也能使选中表支持压缩功能:在点击了“Calculate”按钮之后,点击“Next”按钮。在输出选项选择界面,你可以选择创建一个脚本以供复查或储存到一个文件中,立刻执行或者作为一个任务调度。如下图所示:

对于DBA来说,因为数据压缩将成为数据库维护的一项日常事务,因此建议保存成一个脚本文件。



 附件: 您所在的用户组无法下载或查看附件

图5 数据压缩向导中选择输出选项
最后点“Next”继续,在结束之前,将预览数据压缩汇总信息页面。



 附件: 您所在的用户组无法下载或查看附件

图6 数据压缩向导汇总界面
您可能希望使用sp_estimate_data_compression_savings系统存储过程创建一个脚本,能够遍历所有的表生成一份简要报告,借助这个报告来分析哪些表或索引可以压缩。
1
查看完整版本: 在SQL Server 2008数据库中实现数据压缩
Modify by pin5i DZNT_ExpandPackage 2.1.3258 2007-2008 pin5i.com
  Total Unique Visitors: