分析SQL Server 2008的行数据和页数据压缩

日期: 2010-04-25 作者:Robin2005 来源:TechTarget中国 英文

  本文将为大家介绍SQL Server 2008行数据和页数据的一些处理方法,希望能对DBA的管理工作有所帮助。

  SQL Server的性能主要取决于磁盘I/O效率,提高I/O效率某种程序上就意味着提高性能。SQL Server 2008提供了数据压缩功能来提高磁盘I/O。

  数据压缩意味着减小数据的有磁盘占用量,所以数据压缩可以用在表,聚集索引,非聚集索引,视图索引或是分区表,分区索引上。

  数据压缩可以在两个级别上实现:行级别和页级别。页级别压缩包括行级别压缩。表和索引在创建的同时就可以压缩,也可以使用Alter Table Rebuild With 或是 Alter Index Rebuild With语法压缩已存在表或是索引。当堆(Heap)上的压缩状态改变时,所有的非聚集索引也会重建。

  下面让我们看看压缩过程到底都做了些什么。

  行压缩:

  1.减少元数据头记录数据。

  2.所有的数值类型(integer,decimal,float)或基于数值类型的类型都会被压缩(datetime,money)。比如,100被存在一个int型字段中,占4位,但是从0~255只需要1位,压缩后,就节省了3byte空间。

  3.Char和NChar都被存放于可变长度的类型中。原因同上。比如,CSDN被存在Char(10)中,但是它只需要Char(4)空间,所以压缩后就释放了Char(6)个空间。

  4.所有类型的NULL和0都不占字节了。

  页压缩:

  1.进行行压缩。

  2.前标压缩:每一页中的所有列,在行标头下面,每行都存储着一个行定义值,压缩后,所有行的定义值都被替换成行头值的引用。

  3.字典压缩:字典压缩和前标压缩类似。前标压缩中,一个与其他普通值不同的值被定义到每一列上。但是字典压缩中,每一页中所有列的普通值被存在下一行的行头前面。然后,这些值被替换成新行的引用值。

  下面我们来看一个例子:

USE tempdb   
GO   
CREATE TABLE TestCompression (col1 INT, col2 CHAR(50))   
GO   
INSERT INTO TestCompression VALUES (10, ‘compression testing’)   
GO 5000   
— Original   
EXEC sp_spaceused TestCompression   
GO   
— DATA_COMPRESSION = ROW   ALTER TABLE TestCompression   REBUILD WITH (DATA_COMPRESSION = ROW);   
GO   
EXEC sp_spaceused TestCompression   
GO   
— DATA_COMPRESSION = PAGE   ALTER TABLE TestCompression   REBUILD WITH (DATA_COMPRESSION = PAGE);   GO   
EXEC sp_spaceused TestCompression   
GO   
— DATA_COMPRESSION = NONE   ALTER TABLE TestCompression   REBUILD WITH (DATA_COMPRESSION = NONE);   GO   
EXEC sp_spaceused TestCompression   
GO

  

案例

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐

  • Notre Dame对云端SQL Server性能基准的探索实践

    确立SQL Server的性能基准,对于云端迁移来说是至关重要的第一步,一位来自于University of Notre Dame 的DBA表示,他正在试图通过数据库监控软件,找出SQL server的性能基准。

  • DBA必须掌握的数据库恢复管理技术

    如果没有备份副本,数据库管理员就无法还原数据库,所以DBA在恢复之前倾向于考虑备份是合乎逻辑的。 但是,对我来说,这种逻辑一直是错误的。

  • DBA也要和领导抢饭碗?

    数据库架构师Ziaul Mannan 认为,DBA有成为高管的潜在可能,而这种潜力在过去往往被忽视,他还将证明DBA技能到领导力的转变是可行的。

  • Oracle备份和恢复简史

    这些年来,Oracle数据库备份和恢复方式已经发生了重大变化,特别是在Recovery Manager(RMAN)功能有了进一步改善之后。