我一直在优化我的网站和数据库,使用mysqltuner.pl来帮助我完成这些工作。我已经几乎做到了所有的正确操作,除了表缓存命中率。无论我在my.cnf中如何提高它,我仍然只有约0%的命中率(284个打开/ 79k个打开)。
我的问题是,我不太明白究竟是什么影响了这个参数,所以我不知道在查询和数据库结构中应该寻找什么来解决这个问题。
表缓存定义了MySQL同时打开的文件描述符数量。因此,表缓存命中率将受到您的限制相对于表的数量以及您重新引用表的频率的影响(请记住,它不仅计算单个连接,还计算同时连接的数量)。
例如,如果您的限制是100,而您有101个表,并按顺序查询每个表,则永远不会获得任何表缓存命中。另一方面,如果您只有一个表,除非经常运行FLUSH TABLES(只要您的table_cache设置高于通常同时连接的数量),否则通常应该接近100%的命中率。
因此,为了进行调整,您需要查看一个进程/客户端可能引用的不同表的数量,然后查看您通常可能具有的同时连接数量。
没有更多细节,我无法猜测您的情况是由于太多同时连接还是由于引用频繁的表太多。