Thanks a lot. I like option 3 as it is simple and faster(I guess).
Is option 5 still an online operation if there is continuous traffic?
BTW, another factor should be considered is disk space, because LCP and REDO would require more space during alter operation.
From: Andrew Morgan [mailto:andrew.morgan@stripped]
Sent: 2013年2月18日 19:18
To: LIU Xun
Subject: RE: Alter table lack of RAM
You're correct that the on-line repartitioning of data temporarily uses extra memory on the data nodes. In most cases the application data is split over many tables and so relatively little memory is needed when repartitioning each table. If the data is in one big table and you don't have the available RAM then there are a number of options...
1) Perform the data migration yourself in an iterative fashion. e.g.
create cdr2 (....) partition by ...;
insert into cdr2 select * from cdr order by .... LIMIT 1000;
delete from cdr order by .... LIMIT 1000; } until cdr empty.
Some extra memory will be used, but shouldn't be double. Best effect would be if the order by .... could follow insert-order in some way.
2) Backup the data and restore it on another Cluster (with more memory), repartition and then revers the process.
3) Use mysqldump, empty the table, repartition it and then load the data back in
4) Convert the table to be disk-based (on-line operation), repartition and then convert it back into an in-memory table
5) (Temporarily) add extra RAM to the data nodes (this is an on-line operation).
> -----Original Message-----
> From: Alex [mailto:xun.liu@stripped]
> Sent: 17 February 2013 07:29
> To: cluster@stripped
> Subject: Alter table lack of RAM
> I have a NDB table called cdr which has 10M rows, roughly 20Gb. And,
> the table cdr is partitioned by cdrYear.
> Now, I want to change the partition by below command,
> * alter table cdr partitioned by key(areaCode)*
> It was said "When you do an alter table, a new copy of the table is
> created and the is copied to that table, which is later renamed to the
> original, and the original table is removed."
> That means, there would be two table in RAM when altering table.
> The total RAM of my server is 30Gb. if two tables are existing, they
> would require at least 40Gb.
> So, can this alter operation success since there are lack of 10Gb RAM?
> View this message in context: http://mysql-
> Sent from the MySQL - Cluster mailing list archive at Nabble.com.
> MySQL Cluster Mailing List
> For list archives: http://lists.mysql.com/cluster
> To unsubscribe: http://lists.mysql.com/cluster