データのインポートを早くする

mysqldumpコマンドでダンプしたデータをインポートする時、データ量が多いと非常に時間がかかる。

少しでも時間を縮める方法がないかと思って探したら発見しました。


InnoDBのリストアを高速化 - MySQL Practice Wiki


なるほど、MySQLのオプションを変更すれば早くなるわけか。


早速試してみた。

/etc/mysql/my.cnfに以下の二行を追加

skip_innodb_doublewrite
innodb_flush_log_at_trx_commit=0

で、MySQLを再起動


下みたいな感じのテーブルに

root: [test] > describe test;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    | auto_increment |
| value | int(11) | NO   |     | NULL    |                |
+-------+---------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

200万件のデータをインポートするのにかかる時間を計ってみた。


Before

/home/shizm% date
2010年 12月 14日 火曜日 18:38:03 JST
/home/shizm% mysql -ushizm -p test < sample_data.sql
/home/shizm% date
2010年 12月 14日 火曜日 18:39:51 JST


After

/home/shizm% date
2010年 12月 14日 火曜日 18:42:41 JST
/home/shizm% mysql -ushizm -p test < sample_data.sql
/home/shizm% date
2010年 12月 14日 火曜日 18:42:53 JST


かなりめちゃくちゃ早くなった。ひゃっほー!