MySQL の設定ファイルは DB サーバーの規模に合わせて /usr/share/mysql に用意されている。
これまで自宅サーバーではメモリもあんまりないから my-large.cnf を使ってきたんだけど、これには query_cache_size が設定されていないことがわかった。CPU を食うわけだ。
small はメモリが 64MB 以下, medium は128MB 以下, large は 512MB 以下, huge は 1GB ~ 2GB 以下, innodb-heavy は 4GB と InnoDB が目安。
$ ls /usr/share/mysql/my-*.cnf /usr/share/mysql/my-huge.cnf /usr/share/mysql/my-innodb-heavy-4G.cnf /usr/share/mysql/my-large.cnf /usr/share/mysql/my-medium.cnf /usr/share/mysql/my-small.cnf
WordPress に有効な query_cache_size は large 以上じゃないと入ってない。そのままだと query_cache_size は 0 (ゼロ) になる。
$ grep "query_cache_size" /usr/share/mysql/my-*.cnf /usr/share/mysql/my-huge.cnf:query_cache_size = 32M /usr/share/mysql/my-innodb-heavy-4G.cnf:query_cache_size = 64M /usr/share/mysql/my-large.cnf:query_cache_size= 16M
/etc/my.cnf を my-large.cnf で置き換えて MySQL を再起動。
$ cp -a /etc/my.cnf /etc/my.cnf.orig $ sudo cp /usr/share/mysql/my-large.cnf /etc/my.cnf $ sudo /sbin/service mysqld restart
設定状況は次のコマンドとかで確認できる。query_cache_size が 0 (ゼロ) だとあほあほ。
$ mysqladmin -u root -p variables | grep query_cache $ echo "SHOW VARIABLES LIKE 'query_cache_%';" | mysql -u root -p
現在のキャッシュ状況は次のコマンドなんかで確認できる。
$ echo "SHOW STATUS LIKE 'Qcache%';" | mysql -u root -p