Pro*_*ter 4 mysql innodb cache
在query_cache_size
一个通常会希望能像那种环境看起来这使我迷惑不解,因为它默认为0
。然后我从 MySQL 文档中阅读了有关query_cache_wlock_invalidate
设置的以下内容
通常,当一个客户端在 MyISAM 表上获取 WRITE 锁时,如果查询缓存中存在查询结果,则不会阻止其他客户端发出从表中读取的语句。将此变量设置为 1 会导致获取表的 WRITE 锁,从而使查询缓存中引用该表的任何查询无效。这会强制尝试访问该表的其他客户端在锁定生效时等待。
它没有提及 InnoDB 引擎。当 Innodb 对行/表有写锁时,此设置是否也阻止从缓存读取?
我很高兴您询问了 InnoDB 和查询缓存。
恕我直言,他们不应该出现在同一个句子或同一个对话中。请原谅我在第一句话中使用它们。
除了开玩笑,我已经在 DBA StackExchange 中多次提到
Jun 11, 2014
:增加 query_cache_size,随着流量的增加,查询速度急剧下降Sep 26, 2013
:查询缓存命中值在我的数据库中没有改变Sep 05, 2012
:频繁查询缓存失效的开销值得吗?这是我Jun 11, 2014
关于为什么应该禁用它的帖子(有例外)
当会话正在等待获取查询缓存锁定时会出现此状态。对于需要执行某些查询缓存操作的任何语句,例如使查询缓存无效的 INSERT 或 DELETE、查找缓存条目的 SELECT、RESET QUERY CACHE 等,都可能发生这种情况。
这绝对是 InnoDB 表的一个大问题,因为 InnoDB 机制在查询缓存上取得进展。我之前写过这个现象
Sep 05, 2012
: https://dba.stackexchange.com/questions/23699/is-the-overhead-of-frequent-query-cache-invalidation-ever-worth-it/23727#23727Sep 26, 2013
:https://dba.stackexchange.com/questions/50290/query-cache-hit-value-is-not-changed-in-my-database/50535#50535你有一些选择
您可以完全禁用查询缓存
SET GLOBAL query_cache_size = 0;
Run Code Online (Sandbox Code Playgroud)
如果此后对 InnoDB 表的所有查询都令人满意,则将其添加到 my.cnf
[mysqld]
query_cache_size = 0;
Run Code Online (Sandbox Code Playgroud)
如果您真的想要更大的查询缓存,也许您应该限制条目的大小
更改这些选项可以让您指定查询缓存条目的最小数量。
例如,如果您设置以下内容
[mysqld]
query_cache_size = 2G
query_cache_min_res_unit = 64M
query_cache_limit = 128M
Run Code Online (Sandbox Code Playgroud)
这将限制查询缓存条目的数量
如果您真的了解您的数据工作负载和吞吐量,您可以尝试限制。
是否启用 MySQL query_cache_size Innodb Lock Safe ?
是的。事实上,当您将查询缓存设置得太大时,InnoDB 在这方面可能是一个真正的控制狂。虽然对此的总体答案是保留 query_cache_size = 0,但可以根据您的数据集和工作负载智能地调整它的大小。
归档时间: |
|
查看次数: |
8512 次 |
最近记录: |