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
補足
ちなみにこのエラーが出るのはModes
がinsert
のときです(merge
でも出るかも)。このモードのときは、一度テンポラリのテーブルを作ってそれから流し込みをするためです。insert_direct
だと起きないです。
*1:ちょっと大きすぎな気もしますがメモリに余裕があるのでこの数値です