天天看点

DB2 v8.2 降低高水位线经验

测试环境上在反复做几次升级后发现数据库表空间的HWM比used pages 高出很多,所以尝试降低高水位线。

开始网上搜索资料讲用runstats、reorg命令,各种尝试后并不管用,后来又了解到db2dart命令,总算让我看到了希望。

db2dart有三个选项:DHWM(Dump HWM)、LHWM(Lower HWM)、RHWM(Remove HWM) 摘抄自《DB2数据库管理最佳实践》

只需使用LHWM选项就足够了,该选项会提供降低HWM的建议,下面是使用方法:

db2dart dbname /lhwm      (回车后会提示输入需要操作的表空间id及期望的HWM值,表空间id可以通过db2 list tablespaces show detail命令查看,期望值可以填used pages的值也可以填0)

以空格分隔输入两个参数后回车将会生成一个以数据库名开头的.RPT文件,打开该文件即可看到提供的几条建议:

DB2 v8.2 降低高水位线经验

图中提示先导出表ZJWEB.RUN_STATUS_TABLE的数据再重建该表,再将数据导入,需要注意的是,LHWM给出的建议并不能总是获得预期的结果。

依照这几条建议做完后发下HWM并没有降低,之后又了解到alter table move命令,由于若index跟表在同一个表空间的话会使index变为UNUSABLE,所以没有尝试。

从图书馆借到《DB2数据库管理最佳实践》,里面有详细介绍降低高水位线的方法,其中db2dart 命令的使用跟我的操作是一样的,但是从书中还了解到:表在离线重组(Reorg)时会保留原数据,同时在表空间内进行一份数据复制,当复制结束后删除原表数据块。如果HWM下没有足够的空间保存数据复制,则重组不但不能降低HWM,反而会导致HWM增加。

看到这里恍然大悟,我在每次操作完它的建议后都会reorg一次,而我们普遍用到reorg方式是离线方式(reorg table tabname),在线方式(reorg table tabname inplace allow write access)会记录大量日志甚至是表大小的几倍且速度较慢。

再次执行它的建议,先将表数据导出,再drop表后重新db2 list tablespaces show detail发现HWM已经降低到接近used pages 了,然后将表重建并导入数据。此时HWM已经跟used pages一致了。

继续阅读