DB2 压缩并重组表

大数据量的表应该进行压缩,不然会占用很大空间。

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

查看DB2库中占用空间大的前3张表:

SELECT * FROM SYSCAT.TABLES WHERE TABSCHEMA = 'schema' ORDER BY NPAGES DESC FETCH FIRST 3 ROWS ONLY

查看DB2表占磁盘空间大小

一、开启表的压缩功能:

  • 建表时指定压缩 create table tableName compress yes
  • 修改表启用压缩:ALTER TABLE tableName COMPRESS YES 执行速度很快,但是要达到压缩目的,还要进行reorg表

扫描表并创建对应的压缩字典,压缩数据(每个表都有自己的压缩字典,新插入的数据会被压缩)

通过查询 SYSCAT.TABLES 中的 COMPRESSION 列,可以确定表是否启用了行压缩以及它使用了哪种行格式。它可能的值如下所示:

  • R 表示使用了行压缩和标准行格式
  • V 表示使用了备用行格式,没有行压缩
  • B 表示使用了备用行格式和行压缩
  • N 表示没有使用行压缩,但使用了标准行格式

通过查询 SYSCAT.TABLES 中的 ROWCOMPMODE 列,可以确定表使用了哪种行压缩类型。它可能的值如下:

  • S 表示使用了经典行压缩
  • A 表示使用了自适应行压缩
  • 留空 表示未启用行压缩

还可以在Dbvisualizer中直接查看表是否启用压缩功能 COMPRESSION 这一选项是N表示表没有启用压缩; 如果是R表示表启用压缩。


二、执行实际的表重组(对已有的数据进行重组压缩):reorg table tableName resetdictionary 会执行很长时间,如果表里数据量较大的话 执行10个小时不在话下
所以直接在DB2服务器上 把命令放脚本里 在后台执行
用有dba权限的用户pusinst1执行 nohup /home/pusinst1/reorg_table.sh &

 1 vi reorg_table.sh
 2 #!/bin/bash
 3 
 4 #指定日志路径
 5 LOGFILE=/home/pusinst1/start.log
 6 
 7 echo `date +'%Y-%m-%d %H:%M:%S'`" 连接到数据库:" >> ${LOGFILE} 2>&1
 8 db2 connect to DCDWDMZC >> ${LOGFILE} 2>&1
 9 
10 echo `date +'%Y-%m-%d %H:%M:%S'`" 收集统计信息:" >> ${LOGFILE} 2>&1
11 db2 runstats on table TDW.SD_ORDERS >> ${LOGFILE} 2>&1
12 
13 echo `date +'%Y-%m-%d %H:%M:%S'`" 开始重组表 :" >> ${LOGFILE} 2>&1
14 db2 "reorg table TDW.SD_ORDERS resetdictionary"  >> ${LOGFILE} 2>&1
15 echo `date +'%Y-%m-%d %H:%M:%S'`" 重组表结束" >> ${LOGFILE} 2>&1

 

查看表压缩比:

SELECT TABNAME, CARD, NPAGES, COMPRESSION, AVGROWCOMPRESSIONRATIO, AVGROWSIZE, PCTPAGESSAVED FROM SYSCAT.TABLES WHERE TABSCHEMA='TDW' AND COMPRESSION='R' ORDER BY TABNAME

 


drop表、压缩重组表后;表空间释放了,但是不会释放磁盘空间,需要再进行降低DB2表空间高水位(HWM)操作
降低表空间高水位操作

另外 例如DB2 V10.5 可以修改数据库配置,开启自动重组;表就会处于一个自动维护的状态。存储空间支持在线释放,不影响系统的正常运行。

[db2inst1@localhost ~]$ db2 update db cfg using AUTO_REORG on
DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.

 

       Database Configuration for Database 
       
 Automatic maintenance(自动维护)                  (AUTO_MAINT) = ON
   Automatic database backup(自动数据库备份)       (AUTO_DB_BACKUP) = OFF
   Automatic table maintenance(自动表维护)         (AUTO_TBL_MAINT) = ON
     Automatic runstats (自动 runstats)           (AUTO_RUNSTATS) = ON
       Real-time statistics(实时统计信息 )         (AUTO_STMT_STATS) = ON
       Statistical views(统计视图)              (AUTO_STATS_VIEWS) = OFF
       Automatic sampling (自动采样)            (AUTO_SAMPLING) = OFF
     Automatic reorganization(自动重组 )         (AUTO_REORG) = ON    

 

posted @ 2023-03-29 16:23  tomato_4  阅读(318)  评论(0编辑  收藏  举报