天天看点

DB2表压缩功能

  实际上DB2表压缩的方法是通过查看整个表,找到重复的字符和字符串后,将那些字符和字符串存储在一个压缩字典中,然后用一个存储在字典中对应数据字符串的替代符号来替代表中的实际数据,从而达到了压缩数据的目的。一个压缩属性的表,肯定有他所对应的压缩字典。

开启表的压缩功能:

create table tableName compress yes 或 alter table tableName compress yes

扫描表并创建对应的压缩字典,并执行实际的表重组,从而压缩数据(表中需要有数据,不能是空表,每个表都有自己的压缩字典,新插入的数据也会继续被压缩):注意此时REORG使用的是RESETDICTIONARY选项

reorg table tableName resetdictionary 

对于压缩后的表,如果想进行一次表重组,而不是重建数据字典,那么:注意此时REORG使用的是KEEPDICTIONARY选项

reorg table tableName keepdictionary

DB2表压缩功能

在压缩前,我们通常想先评估一下表压缩后能节省多少空间可以利用db2 inspect和db2inspf命令来实现:

通过INSPECT ROWCOMPESTIMATE语句进行评估分析。记住,这个命令只是估计压缩的效果,而不是查看最终实际的压缩效果,如果想查看实际的压缩效果,需要查看系统表SYSIBM.SYSTABLES。带压缩估计选项(ROWCOMPESTIMATE)的INSPECT命令,将生成一份报告,描述节省了多少页。语法如下:

DB2 INSPECT ROWCOMPESTIMATE TABLE NAME table_name RESULTS KEEP file_name 

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

DB2INSPF file_name output_file_name

最后打开文件output_file_name就可以看到压缩比例了

结果实例如下:

- - 清单12 .查看示例表TEST1,看一下表压缩方式节省了多少空间

DATABASE: DB2TEST1

VERSION : SQL09010

2007-10-25-21.14.03.500000

操作:ROWCOMPESTIMATE TABLE

模式名:RHETTE

表名:TEST1

表空间标识:3 对象标识:4

结果文件名:test1.resp

表阶段开始(有符号的标识:4,无符号的:4;表空间标识:3):RHETTE.TEST1

数据阶段开始。对象:4 表空间:3

行压缩估计结果:

通过压缩而节省的页数所占的百分比:56

通过压缩而节省的字节数所占的百分比:56

由于行大小太小而不适合压缩的行数所占的百分比:0

压缩字典大小:8192 个字节。

扩充字典大小:3336 个字节。

数据阶段结束。

表阶段结束。

处理已完成。2007-10-25-21.14.03.562000

如果我们对压缩结果不满意,现在想对示例表TEST1进行解压缩,可以发出ALTER TABLE命令,把示例表TEST1的COMPRESS属性设置为NO,再运行REORG命令执行脱机重组,具体如下:

db2 alter table tablenam compress no;

db2 reorg table tablenam resetdictionary;

 除了数据行压缩以外,以前的空值压缩在DB2 V9中继续可以使用。创建表时,可使用可选 VALUE COMRESSION 子句来指定表在使用表级别也可能是列级别的节省空间的行格式。使用 VALUE COMRESSION 时,不会将已指定给已定义的变长数据类型(VARCHAR、VARGRAPHICS、LONG VARCHAR、LONG VARGRAPHIC、BLOB、CLOB 和 DBCLOB)的 NULL 和零长度数据存储在磁盘上。只有与这些数据类型相关联的开销值才会占用磁盘空间。如果使用了VALUE COMRESSION,那么还可以使用可选 COMPRSS SYSTEM DEFAULT 选项来进一步减少磁盘空间的使用量。如果插入的或更新的值等于列的数据类型的系统缺省值,那么使用的磁盘空间最少。缺省值将不会存储在磁盘上。支持COMPRSS SYSTEM DEFAULT的数据类型包括所有数字类型列、定长字符和定长图形字符串数据类型。这表示零和空格可以压缩。要确定是否应考虑对表进行空间压缩,应了解大多数值等于系统缺省值或 NULL 值的表将受益于新的行格式

(关闭开启)空值压缩 db2 alter table tablenam (de)activate value compress

(关闭开启)系统默认压缩 db2 alter table tablenam (de)activate compress system default

或者在定义的表格的时候:db2 create table tablenam value compress

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

实际上DB2表压缩的方法是通过查看整个表,找到重复的字符和字符串后,将那些字符和字符串存储在一个压缩字典中,然后用一个存储在字典中对应数据字符串的替代符号来替代表中的实际数据,从而达到了压缩数据的目的。一个压缩属性的表,肯定有他所对应的压缩字典。

实际上DB2表压缩的方法是通过查看整个表,找到重复的字符和字符串后,将那些字符和字符串存储在一个压缩字典中,然后用一个存储在字典中对应数据字符串的替代符号来替代表中的实际数据,从而达到了压缩数据的目的。一个压缩属性的表,肯定有他所对应的压缩字典。

开启表的压缩功能:

Sql代码

DB2表压缩功能
DB2表压缩功能
DB2表压缩功能
  1. create table tableName compress yes 或 alter table tableName compress yes  
create table tableName compress yes 或 alter table tableName compress yes
           

扫描表并创建对应的压缩字典,并执行实际的表重组,从而压缩数据(每个表都有自己的压缩字典,新插入的数据也会继续被压缩):

Sql代码

DB2表压缩功能
DB2表压缩功能
DB2表压缩功能
  1. reorg table tableName resetdictionary  
reorg table tableName resetdictionary
           

对于压缩后的表,如果想进行一次表重组,而不是重建数据字典,那么:

Sql代码

DB2表压缩功能
DB2表压缩功能
DB2表压缩功能
  1. reorg table tableName keepdictionary  
reorg table tableName keepdictionary
           

在压缩前,我们通常想先评估一下表压缩后能节省多少空间可以利用db2 inspect和db2inspf命令来实现:

Sql代码

DB2表压缩功能
DB2表压缩功能
DB2表压缩功能
  1. db2 inspect rowcompestimate table name tbname results keep tbfile   
  2. db2inspf tbfile alantab_output_RESULTFILE  
db2 inspect rowcompestimate table name tbname results keep tbfile

db2inspf tbfile alantab_output_RESULTFILE