MySQL Tuner quick run through

Written by Peter Davies on .

MySQL tuner is the simplest way to take a default MySQL install and tweaks its performance. I would highly recommend running a load test on the web application as this will help populate all of the caches and also help highlight any problems with indexes or similar.

wget https://raw.github.com/rackerhacker/MySQLTuner-perl/master/mysqltuner.pl
chmod 755 mysqltuner.pl

Run a series of load tests on the application and then run the command:

perl mysqltuner.pl

Now edit the MySQL config with the settings suggested by the tuner script:

nano /etc/mysql/my.cnf
/etc/init.d/mysql restart

This final few steps you will need to iterate a couple of times to get the best results but you should see variables that you need adjusting at the base like:

General recommendations:
    Run OPTIMIZE TABLE to defragment tables for better performance
    MySQL started within last 24 hours - recommendations may be inaccurate
    Enable the slow query log to troubleshoot bad queries
    Adjust your join queries to always utilize indexes
    Increase table_cache gradually to avoid file descriptor limits
Variables to adjust:
    query_cache_size (> 16M)
    join_buffer_size (> 128.0K, or always use indexes with joins)
    table_cache (> 400)
    innodb_buffer_pool_size (>= 1G)

All you need to do is edit the /etc/mysql/my.cnf file adding the changes under the [mysqld] block making sure though that you do not exceed resources available with your hardware:

query_cache_size        = 32M
join_buffer_size        = 2M
table_cache             = 600
innodb_buffer_pool_size = 1G

You can either run a siege load test on a "non-live" site to get the database populated, or leave the live site running for a few hours/days and then repeat the process. After a couple of iterations your database should be optimised as best it can.