@JGM
Couple suggestions for you.
MySQL Tuner tells you that your current configuration is set to utilize a maximum of 23% installed RAM. While this might appear to be an 'efficient' setup, it isn't. Technically, it's just redundant resources that you COULD use, but are NOT. Up your max_connections count. You're hitting the limit right now (150). Bring it up to around 500, you should still be within the memory limit. A good memory limit is anywhere between 60-75% of installed RAM.
You're also being suggested an Optimize operation on the tables. Tables that have a lot of 'SELECT' queries being run on them will often end up being fragmented. A scheduled optimize job is the best way to go about it. BUT, running it once in a while is good too. To do it, issue this command:
Code:
mysqlcheck -u USERNAME -p --auto-repair --check --optimize --all-databases
It'll automatically check, optimize, and repair all your databases. Depending on how fragmented the tables are, you may or may not notice a performance increase. But your database will
You also have an extremely (and mind you, extremely is an understatement here!) large wait and interactive timeout value. A suitable timeout value, good for MOST applications, is anywhere between 5-8 seconds. 300 and 600 seconds is overkill. Adjust that.
Increase your table_cache size to around 4000-5000 from the default 128. Adjust later as needed, based on continued review. Increase the query_cache_size to 64M; you have a lot of spare RAM.
Don't worry about persistent connections; they're fine as long as you have a reasonable timeout value specified. In fact, persistent connections are good, because with modern systems, you can raise the max_connections limit to a significantly higher amount without impacting performance a lot.