DB2集群数据库,数据均衡分布到每个节点问题

本系统有三台数据库服务器,每台上有三个节点。共十五个节点。按照道理来说,如果一个表是分区表的话,那么该表的数据会均匀的分配在这十五个节点上。但是查询结果并非如此!有的节点并没有数据,有数据的节点分配也是不均衡的。

那么就开始查找原因了,首先看检查数据的相关配置问题,这个就是公司专门的人员来做的了。小白不懂这个。

看看建表的时候是怎么建的吧。

随便找了几个大表,立马找出来问题所在。

建表时的PARTITIONING KEY有问题,是随随便便找的字段进行分区的,这样显然是有问题的。

正确的分区键应该是:字段组合能唯一确定一条数据。这样的分区键才是正确的做法。

那么就只能重新建表,清理表了。 

完整的操作过程如下:

【1】记录一下改表有多少数据量,给需要更改的表先换个表名

【2】重建改表

【3】将表数据导入到重建的表中,数据量多的可以分段load。

【4】清除表的冗余空间

【5】千万不要立刻删除temp里面的表数据,要先查看导入的表数据量和记录的量是否一致!!!

【6】检查无误后,删除temp里面的表数据,并清除temp表的冗余空间,最后删除temp表。过程结束

--给表名换个名字
rename table 需要重建的表名 to 需要重建的表名_TEMP@

CREATE TABLE "schema名"."需要重建的表名"
 (你的表字段
 你的表字段
 ......
 )organize by column
 IN "表空间"
--分布主键,这里组合需是唯一确定一条数据
  PARTITIONING KEY
   (code1,
	code2,
	code3,
	...
   ) USING HASHING@

COMMENT ON "schema名"."需要重建的表名"
 (表字段注释
 ......
 )@
 
--导入数据到表中, 数据多的可以分段导入
CALL SYSPROC.ADMIN_CMD('LOAD FROM (select * from 需要重建的表名_TEMP where year_week >= 201914 AND year_week <= 201918) OF CURSOR INSERT INTO schema名.需要重建的表名 NONRECOVERABLE')@
CALL SYSPROC.ADMIN_CMD('LOAD FROM (select * from 需要重建的表名_TEMP where year_week >= 201919 AND year_week <= 201922) OF CURSOR INSERT INTO schema名.需要重建的表名 NONRECOVERABLE')@
CALL SYSPROC.ADMIN_CMD('LOAD FROM (select * from 需要重建的表名_TEMP where year_week >= 201923) OF CURSOR INSERT INTO schema名.需要重建的表名 NONRECOVERABLE')@

--清理冗余空间
CALL SYSPROC.ADMIN_CMD('reorg table '||TRIM('schema名')||'.需要重建的表名 reclaim extents only allow no access')@

-- 先检查load的数据量是否正确,然后执行下列操作,慎重!!!
-- 表数据多的分段删除
--delete from 需要重建的表名_TEMP where year_week >= 201914 AND year_week <= 201918@
--delete from 需要重建的表名_TEMP where year_week >= 201919 AND year_week <= 201922@
--delete from 需要重建的表名_TEMP where year_week >= 201923@
--清理冗余空间
--CALL SYSPROC.ADMIN_CMD('reorg table '||TRIM('schema名')||'.需要重建的表名_TEMP reclaim extents only allow no access')@
--drop table schema名.需要重建的表名_TEMP@

表已经重建完毕,现在来看看表的分配是否已经均衡了,由于我是按照三个字段来分区的,所以可以查看以下结果。

每个节点都有数据,并且每个节点的数据量为1:1:1:1...。该表重建成功!

--查询数据库表是否节点分布均衡语句
SELECT DBPARTITIONNUM(字段1), DBPARTITIONNUM(字段2), COUNT(1) FROM 表名
GROUP BY DBPARTITIONNUM(字段1), DBPARTITIONNUM(字段2) 
ORDER BY DBPARTITIONNUM(字段1), DBPARTITIONNUM(字段2)

--在重建表的过程中,可以进入服务器查看进行到哪个步骤了
su db2inst1
db2 list utilities show detail

由于重建表的过程中,十分消耗数据库资源,cup使用率很大,所以操作尽量在晚上使用少的情况下重建。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值