mysql----对于range分区增加的管理
由于目前生产环境下数据库的一个记录表采用了mysql的range分区进行管理,当初考虑到数据记录在1亿以内,划分了20个分区,500万划分为一个分区,最后一个
分区采用了这样的分区方式“PARTITION 20 VALUES LESS THAN MAXVALUE”,MAXVALUE 表示最大的可能的整数值都存储到p20这个分区。
问题:
由于数据记录的增加,到导致大于一亿的记录都存储到20分区,这样将影响p20分区内的数据查询和写入性能,所以需要对p20分区进行扩展,目前暂时增加到p40分
区。增加分区有这样的方法,是改变单个分区的记录数,比如现在700万的数据存储一个表,就是对数据重新分区,
解决方案1,重新分区。
命令如下:
ALTER TABLE test REORGANIZE PARTITION p0,p1,p2 INTO (
PARTITION m0 VALUES LESS THAN (200),
PARTITION m1 VALUES LESS THAN (400),
PARTITION m2 VALUES LESS THAN MAXVALUE
);
这样的分区方式对数据量小的时候是可行的,但是对于一个亿的数据就不行了,我等了将近10个小时,都不行,看来这种方案对于大数据记录不可行。
解决方案2,删除p20分区,再建立p20及以后分区。
insert into test_temp (SELECT * FROM test where id > 400 )
ALTER TABLE test DROP PARTITION p2;
ALTER TABLE test ADD PARTITION (PARTITION p2 VALUES LESS THAN (600),PARTITION p3 VALUES LESS THAN (800),PARTITION p4 VALUES LESS THAN
MAXVALUE)
insert into test_temp (SELECT * FROM test )
建立一个临时表test_temp存储大于95000000的记录,也就是对20分区进行数据备份,然后删除20分区,再重新添加p20分区及以后分区,再导入备份的数据。这样就比第一种方法快很多,对于大数据量也可行。
阅读(1367) | 评论(0) | 转发(0) |