web-dev-qa-db-ja.com

MySQLはデータファイルにロード-加速?

時には、プロジェクトのデータを再インポートする必要があるため、MySQLテーブルに約360万行を読み取る必要があります(現在はInnoDBですが、実際にはこのエンジンに限定されていません)。 「データをファイルにロード...」が最速のソリューションであることが判明しましたが、トレードオフがあります。キーなしでインポートすると、インポート自体に約45秒かかりますが、キーの作成には時間がかかります(すでに20分間実行されています)。 。)。 -テーブルのキーを使用してインポートを実行すると、インポートが非常に遅くなります

テーブルの3つのフィールドにキーがあり、数値フィールドを参照しています。これを加速する方法はありますか?

もう1つの問題は、遅いクエリを開始したプロセスを終了すると、データベースで実行され続けることです。 mysqldを再起動せずにクエリを終了する方法はありますか?

どうもありがとうDBa

30
DBa

innodbと一括読み込みを使用している場合、ここにいくつかのヒントがあります。

csvファイルをターゲットテーブルの主キーの順序でソートします。innodbはクラスター化された主キーを使用するため、ソートするとロードが速くなることに注意してください。

私が使用する典型的なロードデータファイル:

truncate <table>;

set autocommit = 0;

load data infile <path> into table <table>...

commit;

ロード時間を増やすために使用できる他の最適化:

set unique_checks = 0;
set foreign_key_checks = 0;
set sql_log_bin=0;

csvファイルを小さなチャンクに分割する

バルクロード中に観察した典型的なインポート統計:

3.5 - 6.5 million rows imported per min
210 - 400 million rows per hour
47
Jon Black

このブログ投稿はほぼ3年前のものですが、それでも関連性があり、「LOAD DATA INFILE」のパフォーマンスを最適化するためのいくつかの良い提案があります。

http://www.mysqlperformanceblog.com/2007/05/24/predicting-how-long-data-load-would-take/

7
Ike Walker

InnoDBはかなり良いエンジンです。ただし、これは「調整」されることに大きく依存しています。 1つは、挿入が主キーの増加順になっていない場合、innoDBはMyISAMよりも少し長くかかる可能性があることです。これは、より高いinnodb_buffer_pool_sizeを設定することで簡単に克服できます。私の提案は、専用のMySQLマシンでは、合計RAMの60-70%に設定することです。

1
user2163461