【MySQL】手軽な高速化手段
問題
忙しそうなMySQLを高速化したい。
答え
もし現在の設定が以下のようであれば
mysql< show variables like 'innodb_flush_log_at_trx_commit'; +--------------------------------+-------+ | Variable_name | Value | +--------------------------------+-------+ | innodb_flush_log_at_trx_commit | 1 | +--------------------------------+-------+
以下のコマンドで、高速化できる。
mysql< set global innodb_flush_log_at_trx_commit = 2;
動的システム変数なので、再起動不要で、設定したらすぐ反映される。
再起動後も維持したい場合は my.cnf にも書いておく。
デフォルトは innodb_flush_log_at_trx_commit = 1 。トランザクション単位でログを書き出す設定。
innodb_flush_log_at_trx_commit = 2 にすることで、1秒おきなど一定期間ごとにまとめてログを書き出すようになる。
つまり、もし障害が発生すれば、ログを書き出すまでの間の変更は失われるのだが、
ディスクへの書き込みがまとめて行われるようになり、ディスクの負荷が減るため、
大量の更新がある環境などでは、2,3倍速く動くようになる。
障害発生時にデータが失われる可能性があるという点が許容できない場合では、2に設定はできないけど、
例えばレプリケーションのスレーブ側(しかも低スペックな場合)などにはよいかもしれない。
コメント