我有一台在 Linux 上运行的 MySQL 服务器。它有一些关键的应用程序,我们将查询缓存设置得尽可能高。我还有一些非关键数据库(wordpress / 等)。
问题:
- 是否可以在每个数据库级别微调查询缓存?
- 是否可以在每个表的基础上微调查询缓存?
- 它甚至值得做吗?在关键表上有一个微调的查询缓存,在访问不重要的数据时数据库是否还会卡顿?
提前致谢
我有一台在 Linux 上运行的 MySQL 服务器。它有一些关键的应用程序,我们将查询缓存设置得尽可能高。我还有一些非关键数据库(wordpress / 等)。
问题:
提前致谢
不幸的是,很少有选项可以让您操作 MySQL 查询缓存。
该query_cache_limit
选项指示 MySQL 不缓存大于设置限制的查询结果。您想要降低此值的原因:
SQL_NO_CACHE
紧跟在语句之后的关键字指示SELECT
MySQL 不缓存此结果。
相反,您可以将query_cache_type
server 选项设置为,2
以便仅SQL_CACHE
缓存使用关键字的查询。
我还建议确保您的查询缓存实际上已被充分使用。SHOW STATUS LIKE 'Qcache_free_memory';
为您提供此信息。如果您的查询缓存中有很大一部分是空闲的,那么这可能意味着您的数据更改过于频繁,以至于缓存中的结果无法重用。这也可能意味着您的大多数查询返回的结果集大于query_cache_limit
(这反过来可能表明查询设计不当)。
这里还有一些其他提示。
但是,您正确地想知道这是否值得麻烦。在我看来,查询缓存充其量只是快速数据库的次要因素。适当的索引是第一个因素。此外,在许多情况下,您的内存将更好地用于缓存索引(最重要的参数是innodb_buffer_pool_size
InnoDB 表或key_buffer_size
MyISAM 表)