8

6 つの INT 列、1 つの SMALLINT、2 つの TINYINT、および 1 つの FLOAT 列を持つ MyISAM エンジンを使用する MySQL テーブルがあります。数十億の行があります (データ ファイルは 100 GB です)。キーを有効にしてすべての列にインデックスを付けようとしましたが、それは起こりませんでした。「myisamchk -r tableName」を試すと、次のエラーが発生しました。

- recovering (with sort) MyISAM-table 'tableName'                               
Data records: 662929483                                                         
- Fixing index 1                                                                
myisamchk: error: myisam_sort_buffer_size is too small                          
MyISAM-table 'tableName' is not fixed because of errors                         
Try fixing it by using the --safe-recover (-o), the --force (-f) option or by not using the --quick (-q) flag

代わりに"myisamchk -rov tableName " を使用すると、再び永遠に時間がかかります (おそらく、ソート方法ではなくキーキャッシュ方法を使用しているため)。

この場合、myisam_sort_buffer_size を増やすことは意味がありません (myisam_sort_buffer_size とsort_buffer_sizeに対する答えは、値を増やすことは決して意味がないことを示唆しています)。マシンには 32GB の RAM が搭載されています。

4

2 に答える 2

1

100GB のデータをオフラインで処理している場合。データを個別のテーブルに分割して、バッチ テーブルを作成します。それぞれのテーブルには、適切なインデックス作成と innodb などのデータベース エンジンを使用して数百万のデータが含まれます。

これらのデータをリアルタイム アプリケーションでオンラインで使用している場合は、膨大なデータ ボリュームの管理に関する以下のリンクを参照してください。 200 GB 以上のデータに適したデータベースはどれですか?

于 2014-08-21T17:43:15.013 に答える