AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 604315
Accepted
Programster
Programster
Asked: 2014-06-12 03:09:42 +0800 CST2014-06-12 03:09:42 +0800 CST 2014-06-12 03:09:42 +0800 CST

是否启用 MySQL query_cache_size Innodb Lock Safe?

  • 772

看起来像是人们通常希望启用的query_cache_size那种设置,这让我感到困惑,因为它默认为0. 然后我从 MySQL 文档中阅读了有关query_cache_wlock_invalidate设置的以下内容

通常,当一个客户端在 MyISAM 表上获得 WRITE 锁时,如果查询结果存在于查询缓存中,则不会阻止其他客户端发出从表中读取的语句。将此变量设置为 1 会导致获取表的 WRITE 锁,以使查询缓存中引用该表的任何查询无效。这会强制其他尝试访问该表的客户端在锁定生效时等待。

它没有提到 InnoDB 引擎。当 Innodb 在行/表上有写锁时,此设置是否也阻止从缓存中读取?

mysql
  • 1 1 个回答
  • 9004 Views

1 个回答

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2014-06-13T13:36:08+08:002014-06-13T13:36:08+08:00

    我很高兴您询问了 InnoDB 和查询缓存。

    恕我直言,他们永远不应该出现在同一个句子或同一个对话中。请原谅我在第一句话中使用它们。

    不开玩笑了,我在 DBA StackExchange 上讲过很多次

    • Jun 11, 2014:增加 query_cache_size,随着流量的增加,查询速度急剧下降
    • Sep 26, 2013:查询缓存命中值在我的数据库中没有改变
    • Sep 05, 2012:频繁查询缓存失效的开销值得吗?

    这是我Jun 11, 2014关于为什么应该禁用它的帖子(有例外)

    根据查询缓存状态的 MySQL 文档

    当会话等待获取查询缓存锁定时会出现此状态。这可能发生在任何需要执行某些查询缓存操作的语句上,例如使查询缓存无效的 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#23727
    • Sep 26, 2013:https ://dba.stackexchange.com/questions/50290/query-cache-hit-value-is-not-sharing-in-my-database/50535#50535

    您有一些选择

    选项1

    您可以完全禁用查询缓存

    SET GLOBAL query_cache_size = 0;
    

    如果此后对 InnoDB 表的所有查询都令人满意,则将其添加到my.cnf

    [mysqld]
    query_cache_size = 0;
    

    选项 #2

    如果您真的想要更大的查询缓存,也许您应该限制条目的大小

    • 你可以提高query_cache_min_res_unit。它的默认值为 4K。如果将其设置得更高,这将防止小结果出现在查询缓存中。这将减少查询缓存中的条目总数。
    • 您可能想要更改query_cache_limit。它的默认值为 1M。

    更改这些选项可以让您指定查询缓存条目的最小数量。

    例如,如果您设置以下

    [mysqld]
    query_cache_size = 2G
    query_cache_min_res_unit = 64M
    query_cache_limit = 128M
    

    这将限制查询缓存条目的数量

    • 最少 16 个(2G / 128M)
    • 最大32(2G/64M)

    如果您真的了解您的数据工作量和吞吐量,您可以尝试这些限制。

    您的实际问题

    是否启用 MySQL query_cache_size Innodb Lock Safe ?

    是的。实际上,当您将查询缓存设置得太大时,InnoDB 在这方面可以成为真正的控制狂。虽然对此的总括答案是保留 query_cache_size = 0,但可以根据您的数据集和工作负载智能地调整它的大小。

    • 8

相关问题

  • 开源与专有关系 db mgt 系统的优缺点是什么?

  • 在 solaris 10 上为 mysql 设置 max_allowed_pa​​cket

  • 如何移动 MySQL 的数据目录?

  • 通过 VPN 连接什么是远程服务器 IP?

  • mysql崩溃

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve