每个数据库/表的MySQL查询缓存

时间:2012-06-18 21:19:09

标签: mysql performance caching

我在Linux上运行了一个MySQL服务器。 它有一些关键应用程序,我们已经设置了尽可能高的查询缓存。 我也有一些非关键数据库,(wordpress / etc)。

问题:

  1. 是否可以在每个数据库级别微调查询缓存?
  2. 是否可以基于每个表微调查询缓存?
  3. 是否值得做?在关键表上有一个很好的调优查询缓存,在访问非重要数据时,数据库是否仍会断断续续?
  4. 提前致谢

1 个答案:

答案 0 :(得分:5)

不幸的是,很少有选项可以让你操纵MySQL查询缓存。

query_cache_limit选项指示MySQL不缓存大于设置限制的查询结果。您希望降低此值的原因:

  • 一些相对罕见的查询返回大型结果集
  • 大多数较慢的查询通常返回小结果集

SQL_NO_CACHE关键字紧跟在SELECT语句之后,指示MySQL不缓存此结果。

相反,您可以将query_cache_type服务器选项设置为2,以便仅缓存使用SQL_CACHE关键字的查询。

我还建议确保您的查询缓存实际上已完全使用。 SHOW STATUS LIKE 'Qcache_free_memory';为您提供此信息。如果您的查询缓存中有很大一部分是空闲的,那么这可能意味着您的数据更改太频繁,无法重用缓存中的结果。 这也可能意味着您的大多数查询返回的结果集大于query_cache_limit(这反过来可能表明设计错误的查询)。

还有一些其他提示here

但是,你正确地想知道这是否值得麻烦。在我看来,查询缓存充其量只是快速数据库的次要因素。适当的索引是 的第一个因素。此外,在许多情况下,您的内存将更好地用于缓存索引(最重要的参数是InnoDB表的innodb_buffer_pool_size或MyISAM表的key_buffer_size