range分区增加的管理
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分区及以后分区,再导入备份的数据。这样就比第一种方法快很多,对于大数据量也可行。