0

あるテーブルの内容を別のテーブルにコピーする必要があります。だから私は使い始めました:

INSERT new_table SELECT * FROM old_table

ただし、現在、次のエラーが発生しています。

1297, "Got temporary error 233 'Out of operation records in transaction coordinator (increase MaxNoOfConcurrentOperations)' from NDBCLUSTER"

私はこれが発生する理由を理解していると思います。私のテーブルは巨大であり、MySQLは時間内にスナップショットを取得しようとします(すべてをロックし、それから1つの大きなトランザクションを作成します)。

ただし、私のデータはかなり静的であり、データを変更する他の同時セッションはありません。全体をロックせずに、一度に1行ずつ、または小さなチャンクでコピーするようにMySQLに指示するにはどうすればよいですか?

編集メモ:テーブル全体を行ごとにメモリ/ファイル/ダンプに読み込んで書き戻すことができることはすでに知っています。簡単な方法があるかどうか知りたいです(おそらく分離レベルを設定しますか?)。エンジンはInnoDBであることに注意してください。

4

2 に答える 2

2

あなたが言うように、データ移行は、ロックの数が正常に保たれるようにするためにCURSORが理にかなっている数少ない例の 1 つです。

カーソルをTRANSACTIONと組み合わせて使用​​します。ここでは、すべての行の後、または N 行の後にコミットします (たとえば、モジュロでカウンターを使用します)。

于 2012-08-14T06:01:32.340 に答える
0

innodb から outfile にデータを選択し、infile をクラスターにロードする

于 2012-08-14T06:10:33.330 に答える