テーブルのキーファイルが正しくありません。非常に大きなMySQLテーブルを1つにマージするときに修復してみてください

私は3GBのRAMを搭載したWindows Vista 32ビット版でMySQLサーバ5.0.67を使用しています...

私は450万のMyISAM行テーブル(表A)を持っており、これらの行のそれぞれを通り、特定の情報を抽出し、別のMyISAMテーブル(表B)に移入するC#.NETプログラムを作成しました。表Aの各行について、表Bの約80行を収集します。表Bの構造は、Field1(整数)、Field2(ビット)、Field3(varchar(3))、Field4(mediumint(8))、Field5 (mediumint(8))、Field6(integer)、およびField1,2,3の組み合わせに固有のキーがあります。

IGNORE ON DUPLICATE KEY UPDATE ...句を使用してテーブルBに挿入します

Aからすべての行をループすると、最初はOK(約50行/秒)が開始されましたが、約120,000行が処理されたので、辛抱強く遅くなり始めました。そこで、テーブルBと同じ構造の500個の小さなテーブル(単にテーブルBではなく)に行の挿入を分割することにしました。これは約1日で完了しました。

だから私はすべての500テーブルをテーブルBにマージしようとしました(今までは空でした)。 INSERT INTO B SELECT * FROM(これらの500テーブルのうちの1つ)を実行するスクリプトを作成しました。重複したキー更新を無視しました...私はこれをしばらく続けました。 spをそれぞれのテーブルに置き、一晩実行させます。問題は、特定の時点で約100回のマージの後、「B.MYIテーブルのキーファイルが正しくない;修復しようとしました」というエラーが表示されることです。

一時ファイルが大きくなり過ぎた可能性があるためですか?または、インデックスが破損した理由が他にありますか?たぶん2GB以上のデータを扱っていたのだろうか? 5つのマージ(150ではなく)の実行バッチがより賢明な解決策になるか?テーブルを修復することは私にとっては選択肢ではありません。小さなテーブルのどこに間違いがあるのか​​わからないから、もう一度やり直して、それが機能することを確認しなければなりません。私は現在、.msiファイルを使用してMySQL 5.5.19にアップデートすることを考えていますが、面倒な価値があるかどうかはわかりません。私はちょうどこのテーブルBを作成し、それをダンプして別の場所に移動したいと思う。私はまだオリジナルの500テーブルを持っていますので、誰かが私を1に合併する正しい方向に向けることができればそれは素晴らしいでしょう!

前もって感謝します、 ティム

1
tmpフォルダには通常2GBの制限があり、それを見るにはdf -hを試してください
追加された 著者 Elzo Valugi,
追加された 著者 Elzo Valugi,

答えはありません

0