December 7, 2013 By Alexander Rubin
恐らくほとんどのMySQL本番環境はLinux上で動いていることだろう。なので、MySQLのパフォーマンスを上げるのに有用な、最も重要なLinuxのチューニングのためのヒントについて書こうと決めた。特に新しい情報はなくて、どれもよく知られているものではあるが、ブログ記事にまとめてみる。
ファイルシステム
- ext4 (またはxfs) をnoatimeオプション付きでマウント
スケジューラはdeadlineかnoop
# echo deadline >/sys/block/sda/queue/scheduler grub.confに"elevator=deadline"を追加
(詳細はLinuxスケジューラとTPCC風ベンチマークの記事を参照)
メモリ
swappinessとNUMAの設定
# echo 0 > /proc/sys/vm/swappiness /etc/sysctl.confに"vm.swappiness = 0"を追加
NUMAインターリーブを設定
numactl --interleave=all
Percona Serverを使っている場合、Percona Server supports NUMA controlにあるように、mysqld_safeスクリプトの中にこれが書いてある。
Jeremy Cole氏のブログNUMAの素晴らしい概要記事とNUMAツールが詳しい。
(それから、innodb_flush_method=O_DIRECTを設定するのも忘れないように)
CPU
省電力モードが無効になっているのを確認すること。
- /sys/devices/system/cpu/cpu0/cpufreq/scaling_governorを確認する。この値はオンデマンドで変更はできない。
- /proc/cpuinfoを確認し、"model name"の下に表示されているCPUの周波数を比較する。
- "ondemand"が実行されていたら無効にする。
"ondemand"が起動している確認する方法。
$ ps ax| grep kondemand|wc -l
65
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
ondemand
上のように起動している状態だと、こうなる。
/proc/cpuinfo:
model name : Intel(R) Xeon(R) CPU E5-4640 0 @ 2.40GHz
..
cpu MHz : 1200.000
この場合、"ondemand"を無効にする必要がある。
これらのシンプルなチューニングのヒントは、MySQLのパフォーマンスを上げ、より安定性を高くする(スワップもしなくなる)。これ以外にもLinuxの設定やMySQLに関する経験があれば聞かせていただきたいものだ。