私のMySQLClusterでは、4つのデータノードのデータ使用量は約77%です。オンラインで新しいデータノードを追加し、パーティションを再編成して、すべてのデータノード間でデータを再配布しようとしました。
ただし、クエリ変更テーブルcustomer_tblの前に、パーティションを再編成します。が正常に実行されると、既存のデータノードのデータ使用量が増加し始め、ERROR customer_tbl is FULLが発生する前に最大95%に達しました。
データノードをオンラインにしてテーブルを正常に再編成するにはどうすればよいですか?私のテーブルには約1億行あります。
そもそも既存のデータノードのデータ使用量が増加したのはなぜですか?また、パーティションを再編成するときのmysqlクラスターの内部動作は何ですか?
データのオンライン再パーティション化により、データノードの余分なメモリが一時的に使用されるのは正しいことです。ほとんどの場合、アプリケーションデータは多くのテーブルに分割されるため、各テーブルを再パーティション化するときに必要なメモリは比較的少なくなります。データが1つの大きなテーブルにあり、使用可能なRAMがない場合は、いくつかのオプションがあります...
自分でデータ移行を繰り返し実行します。例えば.
...;によってcdr2(....)パーティションを作成します。
loop {cdr2に挿入select * from cdr order by .... LIMIT 1000; .... LIMIT1000までにcdrオーダーから削除します。 } cdrが空になるまで。
余分なメモリが使用されますが、2倍にすることはできません。最良の効果は、....による順序が何らかの方法で挿入順序に従うことができる場合です。
データをバックアップし、別のクラスター(より多くのメモリを使用)に復元し、パーティションを再作成してから、プロセスを逆にします。
Mysqldumpを使用して、テーブルを空にし、パーティションを再作成してから、データをロードし直します。
テーブルをディスクベース(オンライン操作)に変換し、パーティションを再作成してから、メモリ内のテーブルに変換し直します。
(一時的に)データノードにRAMを追加します(これはオンライン操作です)。
よろしく、アンドリュー。