我有一个运行在 Linux 上的 MySQL 服务器。 它有一些关键应用程序,我们已将查询缓存设置为我们可以承受的最高值。 我还有一些非关键数据库(wordpress/等)。
问题:
- 是否可以在每个数据库级别微调查询缓存?
- 是否可以针对每个表微调查询缓存?
- 值得做吗?对关键表进行微调查询缓存后,数据库在访问非重要数据时是否仍然卡顿?
提前致谢
最佳答案
不幸的是,很少有选项可以让您操作 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
)
关于每个数据库/表的 MySQL 查询缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11091248/