我目前在mysql复制方面遇到一些问题。我们正在使用主-主设置进行故障转移。
复制本身正在运行,我认为设置正确。但是我们在某些查询上遇到了麻烦,这些查询需要花很长时间才能执行。
示例:
| 166 |数据库|连接| 35 |更新|更新
xx
集xx
= 'xx'其中xx
='xx'和xx
='xx'| 0.000 |
这些更新查询有时需要20到30秒钟以上的时间才能完成,并且由于复制开始滞后一天之内,因此它将滞后几个小时。奇怪的是,它最终将赶上另一个大师。
该表大约有100MM行,大约70GB。在执行查询的主服务器上,它们花费的时间不到一秒钟。
mysql和服务器这两种配置几乎相同,我们尝试优化表和查询,但到目前为止还没有运气。
有什么建议可以尝试解决吗?让我知道是否能为您提供更多信息。
使用:
MariaDB 10.1.35- CentOS 7.5.1804
答案 0 :(得分:0)
此操作的关键方面是要更新多少行:
如果百分比较低(少于行的5%),则索引可以提供帮助。
否则,如果要更新大量行(大于5%),则全表扫描将是最佳选择。如果您有数百万行,这将很慢。也许对表进行分区可能会有所帮助,但我想说您几乎没有机会对其进行改进。
我将假设您正在更新一小部分行,因此可以使用索引。查看WHERE
语句中的条件。如果看起来像这样:
col1 ='xx'和col2 ='yy'
然后,这些列上的索引将使您的查询更快。具体来说:
create index ix1 on my_table (col1, col2);
根据列的选择性,翻转后的索引可能会更快:
create index ix2 on my_table (col2, col1);
您需要尝试哪种方法更适合您的特定情况。