SQL Server SP 为我们带来了vardecimal功能 这项功能使得原来定长的decimal数据在数据文件中以可变长的格式存储 据称这项功能可以为典型的数据仓库节省 %的空间 而SQL Server 在这一基础上又进一步增强了数据压缩功能 SQL Server 现在支持行压缩和页面压缩两种选项 数据压缩选项可以在以下对象上启用
未创建聚簇索引的表
创建聚簇索引的表
非聚簇索引(对表设置压缩选项不会影响到该表上的非聚簇索引 因此聚簇索引的压缩需要单独设置)
索引视图
分区表和分区索引中的单个分区
为什么需要数据压缩
首先可能需要讨论的问题就是为什么在存储成本不断降低的今天 微软还要煞费苦心地在SQL Server中实现并且不断改进数据压缩技术呢?
尽管存储成本已经不再是传统意义上的首要考虑因素 但是这并不代表数据库尺寸不是一个问题 因为数据库尺寸除了会影响到存储成本之外 还极大地关联到管理成本和性能问题
首先我们来讨论为什么会有管理成本的问题?因为数据库需要备份 数据库的尺寸越大 那么备份时间就会越长 当然另外一点就是消耗的备份硬件成本也会随之提高(包括需要的备份介质成本和为了满足备份窗口而需要更高级的备份设备带来的采购成本) 还有一种管理成本就是数据库的维护成本 例如我们经常需要完成的DBCC任务 数据库尺寸越大 我们就需要更多的时间来完成这些任务
接着我们再看看性能问题 SQL Server在扫描磁盘读取数据的时候都是按照数据页为单位进行读取的 因此如果一张数据页中包含的数据行数越多 SQL Server在一次数据页IO中获得的数据就会越多 这样也就带来了性能的提升
最后考虑存储的成本 按照原先SQL Server SP 中vardecimal的压缩数据为例 %的空间节省也就意味着 %的存储成本 而按照SQL Server 当前放出的测试数据 采用新的数据压缩技术可以达到 X X的存储率 再加上如果企业要考虑容灾而增加的存储空间 这样节省的存储硬件成本也将是想当可观的
如何使用数据压缩
SQL Server 中的压缩选项可以在创建表或索引时通过Option进行设置 例如 CREATE TABLE TestTable (col int col varchar( )) WITH (DATA_PRESSION = ROW)
如果需要改变一个分区的压缩选项 则可以用以下语句 ALTER TABLE TestTable REBUILD PARTITION = WITH (DATA PRESSION = PAGE)
如果需要为分区表的各个分区设置不同的压缩选项 可以使用以下的语句 (SQL Server 可以对不同的分区使用不同的压缩选项 这一点对于数据仓库应用是非常重要的 因为数据仓库的事实表通常都会有一个或数个热分区 这些分区中的数据经常需要更新 为了避免数据压缩给这些分区上的数据更新带来额外的处理载荷 可以对这些分区关闭压缩选项) CREATE TABLE PartitionedTable (col int col varchar( )) ON PS (col ) WITH ( DATA_PRESSION = ROW ON PARTITIONS( ) DATA_PRESSION = PAGE ON PARTITION( TO ))
如果是为某个索引设置压缩选项的话 可以使用
CREATE INDEX IX_TestTable_Col ON TestTable (Col ) WITH (DATA_PRESSION = ROW)
如果是修改某个索引的压缩选项 可以使用 ALTER INDEX IX_TestTable_Col ON TestTable REBUILD WITH (DATA_PRESSION = ROW)
SQL Server 同时还提供了一个名为sp_estimate_data_pression_savings存储过程帮助DBA估计激活压缩选项后对象尺寸
数据压缩是怎样工作的
对于行压缩 SQL Server 采用以下三种方法来节省存储空间
减少了与记录相关联的元数据开销 此元数据为有关列 列长度和偏移量的信息 在某些情况下 元数据开销可能大于旧的存储格式
它对于数值类型(例如 integer decimal和float)和基于数值的类型(例如 datetime和money)使用可变长度存储格式
它通过使用不存储空字符的可变长度格式来存储定长字符串
对于页面压缩 SQL Server 则是在一张数据页面上依次采用
行压缩
前缀压缩
字典压缩
配置数据压缩功能需要注意的
尽管SQL Server 的数据压缩功能非常有价值 但是仍然需要注意一些问题
数据压缩功能仅在企业版和开发版中可用
数据压缩可以让一张数据页存储更多的数据行 但是并不能改变单行数据最长 字节这一限制
在一张已经设置了数据压缩的表上创建聚簇索引时 聚簇索引默认继承原表上的压缩选项
在未设置聚簇索引的表上设置页面压缩时 只有以下情况才会获得页面压缩的实际效果
数据使用BULK INSERT语法添加到表中
数据使用INSERT INTO WITH (TABLOCK)语法添加到表中
执行带有页面压缩选项的ALTER TABLE REBUILD命令
在未设置聚簇索引的表上更改压缩选项 会导致该表上所有非聚簇索引都需要重建 因为这些非聚簇索引指向的数据行地址已经都发生了改变
在改变压缩选项时所需要的临时空间大小与创建索引是所需要的空间是一样的 因此对于分区表 我们可以逐个分区设置压缩选项来减少临时空间的需求压力
由于SQL Server 中数据压缩技术其实是SQL Server SP 中vardecimal技术的一个超集 因此设置了数据压缩后就没有必要保留vardecimal了 当然SQL Server 为了保持向后兼容性 在当前版本中仍然保留了vardecimal 但是SQL Server 的下一个版本及可能就会弃用vardecimal选项 因此做了这些设置的数据库应该尽早改变到数据压缩设置下
lishixinzhi/Article/program/Oracle/201311/17483使用GUI配置数据库备份压缩
1. 使用SQL Server管理套件连接到SQL Server 2008实例。
2. 在对象管理器中,右键单击服务器和选择属性来查看服务器属性窗口。
3. 在备份和恢复下,压缩备份显示了备份压缩默认选项的当前设置。这个设置决定了服务器级别对压缩备份的默认:
如果没有选压缩备份,新的备份在默认情况下是不压缩的。
如果选择了压缩备份,那么新的备份在默认情况下会被压缩。
4. 用户需要是sysadmin 或serveradmin 固定服务器角色的成员,来改变数据库备份压缩的默认设置。
您好,我来为您解答:SQL 2005 企业管理器实现方式
任务-》收缩-》文件
2008下两种方法压缩日志
1).
BACKUP LOG xxx TO DISK='xxx.trn'
收缩日志文件
2)
ALTER DATABASE SET RECOVERY SIMPLE
收缩日志文件
ALTER DATABASE SET RECOVERY FULL
如果我的回答没能帮助您,请继续追问。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)