gpt4 book ai didi

mysql - 了解 MySQL 查询优化器

转载 作者:行者123 更新时间:2023-11-29 15:35:28 25 4
gpt4 key购买 nike

我们使用两台具有相同设置和主主复制的 MySQL 服务器。它们位于负载均衡器后面,获得几乎相同的流量、语句等。

在 server1 上,还有一些额外运行的 cron 作业,这是唯一的区别。

但是,我们发现在某些情况下,查询优化器对于两台服务器上的相同查询的行为有所不同。
在这些情况下,我们必须使用 FORCE_INDEX 才能在两台服务器上获得最佳结果。

主要问题是:

  • 是否有任何元数据存储在查询优化器使用的服务器上的某个位置?
  • 如果我们必须备份和恢复数据库(使用 XtraBackup),查询优化器的行为方式是否相同还是从头开始构建?

感谢您的回复
约阿希姆

最佳答案

优化器的操作部分基于“统计数据”。这些统计信息来自显式的ANALYZE TABLE或来自对表的某些更改,例如“向表添加超过 10%”。

两位大师之间没有任何东西可以同步统计数据,因此他们可能会疏远。即使在两者上运行 ANALYZE TABLE 也不一定能使它们同步。这是因为在表中添加了“随机探测”来编制统计数据。

FORCE INDEX 是有风险的,因为“今天有用的东西可能会伤害明天”。

可能发生的情况是这样的:您有一个查询处于选择一个查询计划和另一个查询计划之间的边界。优化器的分析表明它们大约是等效的,但是(由于各种原因)它们并非如此。这可能会导致一台服务器做一件事(快速查询计划),而另一台服务器做其他事情(糟糕的查询计划)。

没有“可靠”和“一致”的方法来解决您的问题。

让我们尝试以不同的方式解决这个问题。提供查询、EXPLAINSHOW CREATE TABLE可能有更好的索引和/或重新制定查询来完全避免该问题,并且可能比您当前的查询计划运行得更快。

关于mysql - 了解 MySQL 查询优化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58288621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com