ITPub博客

首页 > Linux操作系统 > Linux操作系统 > DB2 V9表压缩(三)

DB2 V9表压缩(三)

原创 Linux操作系统 作者:rheet1978 时间:2008-11-17 21:08:31 0 删除 编辑
对已经存在的表使用数据行压缩(表压缩)

       下面我看一下如何对一个已经存在的表(表中有数据存在)启用数据行压缩(表压缩),首先我们需要创建一个示例表 TEST2,并插入部分数据。接下来发出ALTER TABLE命令对示例表TEST2指定COMPRESS属性,运行脱机重组命令,给示例表TEST2创建压缩字典并压缩数据。

       在DB2CLP窗口中,连上示例数据库DB2TEST1,发出CREATE TABLE命令,创建示例表TEST2,初始不使用表压缩功能(不指定COMPRESS关键字),具体如清单18所示:

- - 清单18 .创建示例表TEST2

C:\> db2 connect to db2test1

   数据库连接信息

 数据库服务器         = DB2 / NT 9.1.0

 SQL 授权标识         = RHETTE

 本地数据库别名       = DB2TEST1

C:\> DB2 CREATE TABLE TEST2 ( ID INTEGER , NAME VARCHAR ( 10 ) , DEPARID VARCHAR ( 10 ) , NOTE VARCHAR ( 100 ) ) IN TABLESPACE1

DB20000I  SQL命令成功完成。

 

       命令执行成功,这样我们就创建了示例表TEST2,其不使用表压缩功能,接下来我们对示例表TEST2插入数据,部门编号都是‘001’,备注信息都是‘TEST’,编号和姓名都不相同,具体如清单19所示:

- - 清单19 .对示例表TEST2插入部分数据

C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 1 , ' AA ' , '  001 '  , '  TEST ')

DB20000I  SQL命令成功完成。

C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 2 , ' BB ' , '  001 '  , '  TEST ')

DB20000I  SQL命令成功完成。

C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 3 , ' CC ' , '  001 '  , '  TEST ')

DB20000I  SQL命令成功完成。

C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 4 , ' DD ' , '  001 '  , '  TEST ')

DB20000I  SQL命令成功完成。

C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 5 , ' EE ' , '  001 '  , '  TEST ')

DB20000I  SQL命令成功完成。

C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 6 , ' FF ' , '  001 '  , '  TEST ')

DB20000I  SQL命令成功完成。

C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 7 , ' GG ' , '  001 '  , '  TEST ')

DB20000I  SQL命令成功完成。

C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 8 , ' HH ' , '  001 '  , '  TEST ')

DB20000I  SQL命令成功完成。

C:\> DB2 INSERT INTO TEST2( ID , NAME , DEPARID , NOTE ) VALUES ( 9 , ' II ' , '  001 '  , '  TEST ')

DB20000I  SQL命令成功完成。

 

命令成功完成,这样我们为示例表TEST2插入了9条记录。部门编号都是‘001’,备注信息都是‘TEST’,编号和姓名都不相同。

如果想对示例表TEST2启用表压缩功能,需要把表的COMPRESS选项改成YES。下面我们在DB2CLP窗口中,发出ALTER TABLE命令,把示例表TEST2的COMPRESS属性设置为YES,具体如清单20所示:

- - 清单20 .对示例表TEST2启用COMPRESS属性

C:\> db2 alter table test2 compress yes

DB20000I  SQL命令成功完成。

 

       命令成功完成,此时示例表TEST2启用了表压缩功能,但是由于没有压缩字典的存在,所以示例表TEST2中的数据还不是以压缩的方式存储的。直到显式的发出了脱机REORG命令,创建了压缩字典后,示例表TEST2中的数据才会真正的压缩存储。

下面我们对示例表TEST2创建一个压缩字典,由于是第一次构建压缩字典,所以需要执行带RESETDICTIONARY选项的REORG命令。

在DB2CLP窗口中,对示例表TEST2发出REORG命令,执行脱机重组,为示例表TEST2构建压缩字典,具体如清单21所示:

- - 清单21 .对示例表TEST2创建压缩字典

 

C:\> db2 REORG TABLE test2  resetdictionary

DB20000I  REORG命令成功完成。

 

命令成功完成,这个命令将扫描整个表,创建压缩字典,然后执行实际表的重组,并在重组的过程中压缩数据。由于部门编号和备注信息各行的数据都相同,所以将DB2通过分析与获取数据中出现的重复模式,生成压缩字典。

如果想查看对示例表TEST2使用表压缩(数据行压缩)比不使用表压缩节省了多少空间,可以通过INSPECT ROWCOMPESTIMATE语句进行评估分析,也可以查看系统表SYSIBM.SYSTABLES查看实际的压缩效果,具体如前面所述。

下面我们来总结一下表压缩的相关内容。

如果想对一个新表启用表压缩,可以按照以下步骤:

Ø         创建一个表,将表的COMPRESS属性设置为 YES

Ø         对表装入一部分数据

Ø         执行带有RESETDICTIONARY选项的脱机重组,创建一个新的压缩字典

Ø         装入剩余的数据到这个表中(装入时将考虑压缩字典并在装入时压缩数据)

如果想对一个已经存在的表(表中已经有数据)启用表压缩,可以按照以下步骤:

Ø         通过ALTER TABLE命令将表的COMPRESS属性设置为 YES

Ø         执行带有RESETDICTIONARY选项的脱机重组,创建一个新的压缩字典

如果想查看对表使用表压缩(数据行压缩)比不使用表压缩节省了多少空间,可以通过INSPECT ROWCOMPESTIMATE语句进行评估分析。带压缩估计选项(ROWCOMPESTIMATE)的INSPECT命令,将生成一份报告,描述节省了多少页。语法如下:

DB2 INSPECT ROWCOMPESTIMATE TABLE NAME table_name RESULTS KEEP file_name

 由于INSPECT命令生成的文件是二进制的,无法直接查看,所以我们需要使用DB2INSPF命令将此文件格式转成可读模式才能查看,具体语法如下:

DB2INSPF file_name  output_file_name

 

数据行压缩是基于字典的压缩,每个字典是一个压缩/解压缩数据记录的符号表。算法是基于LEMPEL-ZIV(LZ)算法,使用静态字典,每张表一个字典,存放在永久表对象中。使用数据行压缩的数据无论是在磁盘还是在内存都是压缩的,只有在计算前才会被解压缩,因此极大地节约了I/O带宽和内存,但是增加了CPU消耗。对于压缩的数据行其日志也是压缩的。对于经压缩后不能节省存储的行,DB2不对其进行压缩处理,数据(每一行)中重复的串是高压缩比的关键。文本数据一般压缩得比较好,因为其中往往包括重复字串以及大量的重复字符、前导或后缀空格。

需要注意的是,通过执行CREATE TABLE或ALTER TABLE语句打开表压缩开关时,并不压缩数据,数据仅在创建压缩字典表后才能真正实现压缩。压缩字典表将在临时内存中创建,大约需临时占用10M左右内存,临时内存从UTILITIES HEAP中申请。字典的分析与生成基于表中已有的数据,是离线进行的,在以后的版本中将会支持在线进行,也就是说现在只能是在脱机重组时创建压缩字典,在将来的版本中将支持联机重组时创建压缩字典。

需要注意的是,执行脱机重组(REORG)的时候,有两个重要的选项,分别是RESETDICTIONARY和KEEPDICTIONARY,两个含义和动作都是不一样的。我们来分别来看一下:

当使用RESETDICTIONARY选项的REORG时

 COMPRESS属性   压缩字典是否存在   结果
 YES   YES   建立新的字典表; 并重新压缩全部数据
 YES   NO   建立新的字典表; 并压缩数据
 NO   YES   删除已有字典表,并将全部压缩数据解压缩
 NO   NO   不做任何操作

当使用KEEPDICTIONARY选项的REORG时

 COMPRESS属性   压缩字典是否存在  结果
 YES   YES   保留已有字典表; 压缩新增/变化数据
 YES   NO   建立新的字典表; 并压缩数据
 NO   YES   保留已有字典表,但将全部压缩数据解压缩
 NO   NO   不做任何操作

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9524210/viewspace-496181/,如需转载,请注明出处,否则将追究法律责任。

上一篇: DB2 V9表压缩(二)
下一篇: DB2 V9表压缩(四)
请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2008-06-09

  • 博文量
    84
  • 访问量
    530926