我们使用两台具有相同设置和master-master复制的MySQL服务器。它们位于负载均衡器后面,并获得几乎相同的流量,语句等。
在server1上,还有一些cron作业正在运行,这是唯一的区别。
但是,我们已经看到,查询优化器在某些情况下在两台服务器上的相同查询的行为不同。
在这种情况下,我们必须使用FORCE_INDEX才能在两台服务器上获得最佳结果。
主要问题是:
感谢您的回复
约阿希姆
答案 0 :(得分:0)
优化器的操作部分基于“统计”。这些统计信息来自显式ANALYZE TABLE
或对表的某些更改,例如“向表中添加10%以上”。
两个主机之间没有任何同步数据,因此它们可以分开。即使在两者上同时运行ANALYZE TABLE
也不一定会使它们同步。这是因为在表格中编入了“随机探针”以编制统计信息。
FORCE INDEX
有风险,因为“今天的帮助可能会伤害明天”。
可能是这种情况:您有一个查询处于选择一个查询计划和另一个查询计划之间的边界。优化程序的分析表明它们大约相等,但是(由于各种原因)它们不是相等的。这可能导致一台服务器执行某项操作(快速查询计划),而另一台服务器执行其他操作(不良查询计划)。
没有解决问题的“可靠”和“一致”方法。
让我们尝试以其他方式解决它。提供查询EXPLAIN
和SHOW CREATE TABLE
。可能有一个 更好的索引和/或重新编写的查询可以完全避免问题,并且运行速度可能比您当前的任何查询计划都要快。