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

标签 mysql performance caching

我有一个运行在 Linux 上的 MySQL 服务器。 它有一些关键应用程序,我们已将查询缓存设置为我们可以承受的最高值。 我还有一些非关键数据库(wordpress/等)。

问题:

  1. 是否可以在每个数据库级别微调查询缓存?
  2. 是否可以针对每个表微调查询缓存?
  3. 值得做吗?对关键表进行微调查询缓存后,数据库在访问非重要数据时是否仍然卡顿?

提前致谢

最佳答案

不幸的是,很少有选项可以让您操作 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/

相关文章:

php - 结果只显示一条记录

php - 显示来自 php 文件的图像(存储在 mysql 数据库中)

java - Android : sending data to a WebView with loadUrl or retrieving it from the WebView with a JavascriptInterface? 中什么更快

ios - 如何使用缓存策略 NSURLRequestReloadRevalidatingCacheData

MySQL - 如何计算当前行之前出现的次数

c - 什么时候应该忽略关键部分以及什么时候不需要等待?开放式MP

SQL 窗口函数 - SELECT DISTINCT ORDER BY LIMIT

linux - L1 数据缓存配置

tomcat - Tomcat 集群上的 Eclipselink 缓存协调

mysql - 如何设置 MAMP 以在 OS X SL 上使用现有的 MySQL?