DB2 V9表压缩(一)

关键字:IBM DB2 V9 表压缩 压缩字典 数据行压缩 值压缩

内容提要:DB2 V9新增了可用来压缩数据对象的基于字典的行压缩功能。在压缩数据时,通过使用较少的数据库页来表示相同数据,从而达到节省磁盘存储空间的目的。对于那些行中包含重复模式的大型表,将能从此功能中受益。数据行压缩(COMPRESS 子句)可与现有的空间值压缩(VALUE COMPRESS子句)一起使用。

 

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取消使用空值压缩和系统缺省值压缩。

创建示例数据库DB2TEST1

首先我们在WINDOWS XP环境下安装DB2 ESE V9.1,安装完成后,打开一个DB2CLP窗口,发出CREATE DATABASE语句,创建示例数据库DB2TEST1,具体如清单1所示:

- - 清单1. 创建示例数据库DB2TEST1

C:\> DB2 CREATE DATABASE DB2TEST1

DB20000I  CREATE DATABASE命令成功完成。

 

命令执行成功,这样我们创建了一个示例数据库DB2TEST1。

下面我们继续在DB2CLP窗口中,连上示例数据库DB2TEST1,发出GETDB CFG命令,查看示例数据库的配置参数,在返回结果中可以看到,数据库代码页是1386,数据库地域是CN,数据库代码集是GBK,部分结果如清单2所示:

- - 清单2. 查看示例数据库DB2TEST1配置参数

C:\> db2 connect to db2test1

 

   数据库连接信息

 

 数据库服务器         = DB2 / NT 9.1.0

 SQL 授权标识         = RHETTE

 本地数据库别名       = DB2TEST1

 

C:\> db2 get db cfg for db2test1

 

       数据库 db2test1 的数据库配置

 

 数据库配置发行版级别                                    = 0x0b00

 数据库发行版级别                                        = 0x0b00

 

 数据库地域                                              = CN

 数据库代码页                                            = 1386

 数据库代码集                                            = GBK

 数据库国家/地区代码                                    = 86

 数据库整理顺序                                          = UNIQUE

 备用整理顺序                              ( ALT_COLLATE ) =

 数据库页大小                                            = 4096

 

 . . . . . . . . . . . . . . . . . .

 

下面我们在示例数据库DB2TEST1中创建1个4K页大小的DMS表空间,用来存放示例表的数据,名称为TABLESPACE1。

在DB2CLP窗口中,发出CREATE TABLESPACE命令,创建4K页大小的示例表空间TABLESPACE1,对应的缓冲池使用默认创建的IBMDEFAULTBP,具体如清单3所示:

 

- - 清单3 . 创建DMS示例表空间

C:\> DB2 CREATE  REGULAR  TABLESPACE TABLESPACE1 PAGESIZE 4 K  MANAGED BY AUTOMATIC STORAGE BUFFERPOOL  IBMDEFAULTBP

DB20000I  SQL命令成功完成。

 

命令成功完成。注意,我们在MANAGED BY后面跟的是AUTOMATIC STORAGE,表示新创建的表空间将使用自动存储。如果新建的表空间使用DB2管理存储器(自动存储器),根据要创建的表空间类型不同,其空间管理会有所区别,当其表空间类型是常规或者大型时,将自动创建成数据库管理空间(DMS), 当其表空间类型是系统临时或者用户临时时,将自动创建成系统管理空间(SMS)。使用自动存储,就不再需要担心如何添加容器以及监控容器的增长等,自动存储会自动增加表空间在磁盘和文件系统上的大小。在DB2CLP窗口中输入LIST TABLESPACE命令,你可以看到示例表空间TABLESPACE1已经创建成功,表空间标识是3,其空间管理类型是数据库管理空间,另外,数据库默认创建的3个表空间也在结果集中,分别是SYSCATSPACE、TEMPSPACE1和USERSPACE1,具体如清单4所示:

- - 清单4 . 查看示例表空间

C:\> db2 list tablespaces show detail

           当前数据库的表空间

 表空间标识                        = 0

 名称                       = SYSCATSPACE

 类型                                       = 数据库管理空间

 内容                                = 所有持久数据。常规表空间。

 状态                   = 0x0000

   详细解释:

     正常

 总计页数                            = 8192

 可用页数                            = 8188

 已用页数                            = 7924

 可用页数                            = 264

 高水位标记(页)                    = 7924

 页大小(以字节计)                  = 4096

 扩展数据块大小(页)                = 4

 预取大小(页)                      = 4

 容器数                                  = 1

 

 表空间标识                        = 1

 名称                       = TEMPSPACE1

 类型                                       = 系统管理空间

 内容                                = 系统临时数据

 状态                   = 0x0000

   详细解释:

     正常

 总计页数                            = 1

 可用页数                            = 1

 已用页数                            = 1

 可用页数                            = 不适用

 高水位标记(页)                    = 不适用

 页大小(以字节计)                  = 4096

 扩展数据块大小(页)                = 32

 预取大小(页)                      = 32

 容器数                                  = 1

 

 表空间标识                        = 2

 名称                       = USERSPACE1

 类型                                       = 数据库管理空间

 内容                                = 所有持久数据。大型表空间。

 状态                   = 0x0000

   详细解释:

     正常

 总计页数                            = 8192

 可用页数                            = 8160

 已用页数                            = 96

 可用页数                            = 8064

 高水位标记(页)                    = 96

 页大小(以字节计)                  = 4096

 扩展数据块大小(页)                = 32

 预取大小(页)                      = 32

 容器数                                  = 1

 

 表空间标识                        = 3

 名称                       = TABLESPACE1

 类型                                       = 数据库管理空间

 内容                                = 所有持久数据。常规表空间。

 状态                   = 0x0000

   详细解释:

     正常

 总计页数                            = 8192

 可用页数                            = 8160

 已用页数                            = 96

 可用页数                            = 8064

 高水位标记(页)                    = 96

 页大小(以字节计)                  = 4096

 扩展数据块大小(页)                = 32

 预取大小(页)                      = 32

 容器数                                  = 1

 

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

转载于:http://blog.itpub.net/9524210/viewspace-496177/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值