mysqldumpで出力されるINSERT文の最大長は?
mysqldumpの --extended-insert オプションを利用すると、出力されるINSERT文がバルクINSERTの形式になる。
まとめてINSERTすることで、書き込み回数を減らし、importにかかる時間を短縮するための仕組み。
どこまで長いINSERT文が生成されるんだろうか?
まさか、10Gのテーブルをdumpしたら、10Gの巨大なINSERT文ができる・・・ということはないよね・・・
結論としては、net_buffer_lengthに収まるように調整される。
マニュアルにも記載がある。
試してみる。
mysqldumpはクライアントのため、mysqldumpを実行するサーバのclientセクションに書く必要がある。
まとめて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