現在運用しているサービスの表示が遅いということで、MySQLのメモリの割り当てのチューニングをしてみようと思った。my.cnfでいろいろいじってみたが、どうにも設定が割り当てられるメモリの限界を越えているようで、サービスで何も表示されなくなってしまう。
とりあえずmy.cnfで設定できるパラメータ的なものは、次の命令で表示できる。
SHOW VARIABLES;
character_setで文字設定、data_dirはデータのあるディレクトリなどが分かる。
my.cnfで特に設定されていない場合、つまりデフォルトの値がいろいろと分かる。今回変えようと思ったパラメータの値をまず確認する。innoDB_buffer_pool_size、これはinnoDBテーブルを使う場合は、使えるメモリの50〜80%くらい与えるというくらい重要なもの。しかし、デフォルトでは8Mしか与えられていなかった。とりあえず使っているサーバーのメモリが256しかないので、64だけ与えておいた。my.cnfに
[musqld] innodb_buffer_pool_size = 64M
のように書くことで、変更ができる。ちなみにmy.cnfを変更した場合は、MySQLを再起動する必要がある。
変更したけど、全然変化が見られなかったので、たぶんメモリ自体が足りていないのだろうということで、メモリを増設することとなった。
ついでに、前から気になっていたエラーログも見る。SHOW VARIABLESでlog_errorの値には、エラーログが書かれるファイル名が書かれているはずが空白になっていたのだ。エラーログをとっていないのならOFFとか書かれていると思ったのだけど、これでは意味が分からない。前にmy.cnfに明示的にエラーログの場所を示したのだけど、効果はなかったようだ。仕方ないのでmy.cnfをもう1度確認すると、エラーログはシスログに、デビアンの改良で書き込んでいますというコメントがしてあった。/var/log/syslogを確認すると、他のものに混じってエラーログやMySQLの起動などが記録されていた。前回見たときは、mysql関係はなかった気がしたのだが、それはたまたまエラーや再起動などの処理がなかったからみたいだ。