SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【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に設定はできないけど、
例えばレプリケーションのスレーブ側(しかも低スペックな場合)などにはよいかもしれない。

関連するメモ

コメント