Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2111938
  • 博文数量: 227
  • 博客积分: 10521
  • 博客等级: 上将
  • 技术积分: 3452
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-20 14:59
个人简介

低调做人,高调做事!

文章分类

全部博文(227)

文章存档

2013年(4)

2012年(8)

2011年(16)

2010年(24)

2009年(92)

2008年(83)

分类: LINUX

2008-07-21 14:17:22

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分区及以后分区,再导入备份的数据。这样就比第一种方法快很多,对于大数据量也可行。
阅读(1314) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~