我有一台运行在Linux上的MySQL服务器。 它有一些关键的应用程序,我们已经设置querycache尽可能高,我们负担得起。 我也有一些非关键数据库,(wordpress/etc)。每个数据库的MySQL查询缓存/表
问题:
- 是否有可能微调查询缓存在每个数据库级别?
- 是否有可能在每个表的基础上微调查询缓存?
- 它甚至值得吗?在关键表上有一个优化的查询缓存,数据库在访问非重要数据时会不会停顿?
在此先感谢
我有一台运行在Linux上的MySQL服务器。 它有一些关键的应用程序,我们已经设置querycache尽可能高,我们负担得起。 我也有一些非关键数据库,(wordpress/etc)。每个数据库的MySQL查询缓存/表
问题:
在此先感谢
不幸的是,有极少数的选择,让您操作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
)