MySQLのパフォーマンスチューニングに重要そうなパラメーターの解説の続き。
innodb_flush_method
Unix系のOSを使っていてバッテリーバックアップ機能付きのRAIDカードを使っている場合は、O_DIRECTの使用が推奨されている。
O_DIRECTは、OSのキャッシュ機構を迂回して直接ストレージに書き込む設定です。この設定をすることでOSの管理しているキャッシュとInnoDBの管理してりるキャッシュの重複を防ぐことができメモリの節約になるはず。
innodb_log_files_in_group
InnoDBのトランザクションログファイルの数を指定するパラメーターです。デフォルトの値2から変更する必要なし。
innodb_log_file_size
トランザクションログのファイルサイズです。デフォルトの値では小さすぎるので数百MBから場合によっては数GBぐらいの値を設定する。あまり大きな値にしすぎるとサーバーがクラッシュした際のリカバリに時間が沢山かかるようになる。
innodb_log_buffer_size
トランザクションログを、ディスクに書き出す前にメモリ上に蓄えておくバッファーです。ログをトランザクションのコミットごとに書き出す設定にしていればそんなに大きな値を設定する必要はないのでは無いかと思われる。1~8MBぐらいの値を設定しておけば十分らしいが、大目に割り当ててもメモリが無駄になるだけで性能が下がるわけではないようなので32~128MBぐらいを割り当ててもよさそうです。
innodb_flush_log_at_trx_commit
トランザクションログをバッファーからファイルに書き出すタイミングの設定です。
0の場合
一秒ごとにバッファーからファイルにトランザクションログを書き出す。トランザクションのコミット時には何もしない。
1の場合
トランザクションのコミットごとにバッファーからファイルにトランザクションログを書き出し、同時にディスクへのフラッシュを行う。
2の場合
トランザクションのコミットごとにバッファーからファイルにトランザクションログを書き出す、しかしディスクへのフラッシュは行わない。InnoDBのデフォルトの設定では1秒ごとにディスクへのフラッシュを行う。
1以外の設定にするとシステムがクラッシュした場合や電源が落ちた場合に、最悪1秒分のトランザクションが失われる可能性があるので特別な理由がない限り1以外の値に設定するべきではない。
innodb_file_per_table
テーブルごとにデータファイルを作成するようにする設定です。ディスク容量とかの管理がしやすくなる。
innodb_additional_mem_pool_size
InnoDBの内部データなどを保持するための領域です。パフォーマンスに影響しないのでそれほど大きな値を割り当てる必要はない。
innodb_io_capacity
InnoDBに、1秒当たりどれぐらいのディスクへの読み書きができるかの情報を与えるパラメーターです。通常のディスクでは、一秒間に100回ぐらいしか読み書きができないのでデフォルトの設定で十分だが、キャッシュ付きのRAIDカードやSSDドライブを使用している場合には、そのディバイスのIOPSと同等の値を設定すると性能があがるかも。
innodb_read_io_threads
innodbの読みこみに使用するスレッドの数です。ほとんどのサーバーではデフォルトの設定で十分です。キャッシュ付きのRAIDカードやSSDドライブを使用している場合には増やすと性能が上がるかも。
innodb_write_io_threads
innodbの書き込みに使用するスレッドの数です。ほとんどのサーバーではデフォルトの設定で十分です。キャッシュ付きのRAIDカードやSSDドライブを使用している場合には増やすと性能が上がるかも。