まとめてINSERTすることで、書き込み回数を減らし、importにかかる時間を短縮するための仕組み。
どこまで長いINSERT文が生成されるんだろうか?
まさか、10Gのテーブルをdumpしたら、10Gの巨大なINSERT文ができる・・・ということはないよね・・・
結論としては、net_buffer_lengthに収まるように調整される。
マニュアルにも記載がある。
クライアント/サーバー通信用のバッファーの初期サイズ。複数行のINSERTステートメント (--extended-insertオプションまたは--optオプションを使用する場合など) を作成する場合、mysqldump はnet_buffer_lengthまでの長さの行を作成します。この変数を増加させる場合は、MySQL サーバー内のnet_buffer_length変数が少なくともこの大きさであることを確認してください。
試してみる。
mysqldumpはクライアントのため、mysqldumpを実行するサーバのclientセクションに書く必要がある。
$ cat .my.cnf
[client]
net_buffer_length=16K
$ mysqldump --triggers --routines --events --single-transaction --set-gtid-purged=OFF sbtest > dump16k.txt
$ cat .my.cnf
[client]
net_buffer_length=32K
$ mysqldump --triggers --routines --events --single-transaction --set-gtid-purged=OFF sbtest > dump32k.txt うん、16Kと32Kで比較すると、INSERT文の数がだいたい半分になってる。$ wc -l dump*.txt
12523 dump16k.txt
6246 dump32k.txt
18769 total