Embulk で MySQL に大量のデータを流し込む際にエラーが出る場合

Embulk

今さら説明の必要はないと思いますが、データをいい感じに流してくプロダクトです。

MySQL に大量のデータを流し込み

この Embulk で 100万件 規模の大量のデータを MySQL に流し込もうとすると以下のようなエラーが出てしまいました。

The total number of locks exceeds the lock table size

どうしたものかと。

結論

MySQL のinnodb_buffer_pool_sizeのサイズを大きくしたら問題なくなりました。Ubuntu 16.04 LTS の場合ですと/etc/mysql/mysql.conf.d/mysqld.cnfに例えば以下のように書き加えれば OK です*1。再起動を忘れないようにしましょう。

innodb_buffer_pool_size = 512000000

補足

ちなみにこのエラーが出るのはModesinsertのときです(mergeでも出るかも)。このモードのときは、一度テンポラリのテーブルを作ってそれから流し込みをするためです。insert_directだと起きないです。

*1:ちょっと大きすぎな気もしますがメモリに余裕があるのでこの数値です

Powered by はてなブログ