
/etc/my.cnfをレストア用に最適化したつもり。
サーバーの物理メモリは32G。innoDBだけ使用。
———————————————–
[code lang=”bash”]
read_buffer_size = 2G
read_rnd_buffer_size = 2G
[/code]
デフォルトの1K倍。海外掲示板で2G以上のファイルをload data infileするときはこうするといいよみたいなことが書いてあったので、
メモリも余ってたしそうしてみた。これらはスレッドバッファだし、インデックス使いでないときに使うみたいだから、
16Mぐらいにするつもりだけど、レストア時だけこの値。
[code lang=”bash”]
#log-bin=mysql-bin
[/code]
bin-logはレストア時にはもちろんいらないのでOFFです。普段もOFFです。いまのところ。
[code lang=”bash”]
innodb_buffer_pool_size = 18G
innodb_log_file_size = 1G
innodb_log_files_in_group = 3
[/code]
ログバッファ系3つ、ぎりぎりまで、ではないけど存分に割り当て中です。立ち上がらなくなると困るので余裕をみて半分、さらにread_bufferの分を引いて割り当てています。
[code lang=”bash”]
innodb_flush_log_at_trx_commit = 2
skip_innodb_doublewrite
[/code]
innodb_flush_log_at_trx_commit が0に設定された時は、ログ バッファは1秒に一回ログ ファイルに書き込まれ、ディスク操作へのフラッシュはログ ファイル上で行われますが、トランザクション コミットの際には何も行われません。この値が1(デフォルト)の時は、ログ ファイルは各トランザクション コミットの時にログ ファイルに書き込まれ、ディスク操作へのフラッシュはログ ファイル上で行われます。2に設定された時は、ログ バッファはコミット毎にファイルに書き込まれますが、ディスク操作へのフラッシュはそこでは行われません。しかし、値が2の時もログ ファイル上でのフラッシュは1秒に1回行われます。1秒に1回のフラッシュは、処理スケジュールの発行の為100% 保証された物ではないという事に注意してください。
この変数のデフォルト値は1です。これは ACID 整合性に要求されている値です。MySQL 5.1 Manual より
skip_innodb_doublewriteは
デフォルトで、InnoDB は全てのデータを2回格納します。一回目は二重書き込み バッファに、そして次に実際のデータ ファイルに格納します。この変数はデフォルトで有効化されています。それは、データの整合性や起こり得る失敗に対する心配よりも、ベンチマークや最高性能が要求される時に、–skip-innodb_doublewrite を利用して止める事ができます。MySQL 5.1 Manual より
とのことです。
他のパラメータはレストア用には触っていない。
“大量件数高速レストア時のmy.cnf(load data infile)@再起を賭けた渡辺の軌跡vol.3” への1件のフィードバック