技术开发 频道

DB2 V9表压缩


【IT168 专稿】DB2 V9新增了可用来压缩数据对象的基于字典的行压缩功能。在压缩数据时,通过使用较少的数据库页来表示相同数据,从而达到节省磁盘存储空间的目的。对于那些行中包含重复模式的大型表,将能从此功能中受益。数据行压缩(COMPRESS子句)可与现有的空间值压缩(VALUE COMPRESS子句)一起使用。由于数据行压缩是DB2 V9新增的功能,所以很多用户对其特性不是很了解,本文将重点介绍DB2 V9数据行压缩功能,并通过实际的例子来帮助大家理解和提高。

简介

    在版本9之前,DB2有三种方式的压缩,分别是空间值压缩(VALUE COMPRESS子句)、索引压缩(MDC技术)和数据库备份压缩。
使用空间值压缩(VALUE COMPRESS子句)时,不会将变长数据类型(VARCHAR、VARGRAPHICS、LONG VARCHAR、LONG VARGRAPHIC、BLOB、CLOB和DBCLOB)的 空值(NULL)和零长度数据存储在磁盘上。只有与这些数据类型相关联的开销值才会占用磁盘空间。如果使用了VALUE COMPRESS,那么还可以使用可选COMPRESS SYSTEM DEFAULT选项来进一步减少磁盘空间的使用量。如果插入的或更新的值等于列的数据类型的系统缺省值,那么使用的磁盘空间最少。缺省值将不会存储在磁盘上。支持COMPRESS SYSTEM DEFAULT的数据类型包括所有数字类型列、定长字符和定长图形字符串数据类型。这表示零和空格可以压缩。 

    通过在创建表的时候指定ORGANIZE BY DIMENSIONS选项,将对表的启用MDC功能,可以指定一个或多个键作纬。MDC是使用基于块的索引, 块索引指向记录块或记录组,而不是指向单个记录。通过从物理上根据群集值将MDC表中的数据组织成块,然后使用块索引来存取这些块,能显著地改善性能。在MDC中,群集索引是基于块的。这些索引比常规的基于记录的索引要小很多,因此,占用的磁盘空间更少,并且扫描时速度会更快。 

    如果数据库中的数据量比较大,可以在备份数据库的时候通过指定COMPRESS选项使用备份压缩功能,从而是备份映像文件需要的存储空间最小。 

    DB2 V9新增了可用来压缩数据对象的基于字典的行压缩功能。在压缩数据时,通过使用较少的数据库页来表示相同数据,从而达到节省磁盘存储空间的目的。对于那些行中包含重复模式的大型表,将能从此功能中受益。数据行压缩(COMPRESS子句)可与现有的空间值压缩(VALUE COMPRESS子句)一起使用。对于使用行压缩的表,查询性能可能有所提高。可能需要更少的 I/O 操作来访问压缩数据,并且在压缩后,可以将更多数据高速缓存在缓冲池中。由于用户数据压缩在日志记录内,因此日志记录可能会变小。对于 UPDATE 日志记录,则可能不会出现这种情况。与行压缩关联的成本取决于压缩和解压缩数据所需的额外 CPU 周期。在访问行中的数据时,压缩和解压缩是以行为单位执行的。要评估使用行压缩后存储器的节省情况,可使用 DB2 INSPECT 联机实用程序的 ROWCOMPESTIMATE 选项。在启用了表的COMPRESS 属性并创建了压缩字典之后,才可压缩行。可通过 CREATE 或 ALTER TABLE 语句来设置 COMPRESS 属性。可使用 REORG TABLE 命令来创建压缩字典。在处理 REORG
命令时,现有的所有表行都要被压缩。数据行压缩不适用于索引、LOB、LF 或 XML 对象。 

    在将表存储在磁盘上时,如果对数据行、空值和系统缺省值使用诸如压缩之类的功能,则表可能占用较少的空间。通过数据压缩,可以使用较少的数据库页来存储数据,从而节省磁盘存储空间。由于每页可以存储更多的逻辑数据,因此访问同样多的逻辑数据时需要读取的页数将会少一些。这意味着压缩还可以节省磁盘I/O。I/O速度也会加快,因为可以将更多的逻辑数据高速缓存在缓冲池中。 

    由于数据行压缩是DB2 V9新增的功能,所以很多用户对其特性不是很了解,本文将重点介绍DB2 V9数据行压缩功能,并通过实际的例子来帮助大家理解和提高。 

    我们将按照下列顺序介绍表压缩:

1. 创建示例数据库DB2TEST1:在此章节将一步步讲解如何创建示例数据库DB2TEST1,并创建示例表空间TABLESPACE1。

2. 对新表使用数据行压缩(表压缩):

a) 创建使用表压缩功能的示例表TEST1,插入多条记录;通过运行脱机重组创建压缩字典后,再插入剩余记录;

b) 通过INSPECT ROWCOMPESTIMATE语句进行估计压缩的效果,注意,这个只是估计,和实际的压缩可能会有出入;

c) 查询系统表SYSIBM.SYSTABLES,看一下实际的压缩效果;

d) 取消示例表TEST1的压缩属性,运行脱机重组,对示例表TEST1进行解压缩。

3. 对已经存在的表使用数据行压缩(表压缩):

a) 创建不使用表压缩功能的示例表TEST2,插入数据;

b) 发出ALTER TABLE命令对示例表TEST2指定COMPRESS属性,运行脱机重组命令,给示例表TEST2创建压缩字典并压缩数据。

c) 表压缩总结:总结第二步和第三步中用到的命令,以及表的压缩属性和压缩字典在各种情况下表是否进行压缩进行总结。

4. 对表启用空值、系统缺省值压缩:

a) 创建示例表TEST3,使用空值压缩和系统缺省值压缩,插入数据;

b) 对示例表TEST3取消使用空值压缩和系统缺省值压缩。

0
相关文章