MariaDB更新查询需要很长时间

时间:2018-09-06 07:02:06

标签: mariadb replication

我目前在mysql复制方面遇到一些问题。我们正在使用主-主设置进行故障转移。

复制本身正在运行,我认为设置正确。但是我们在某些查询上遇到了麻烦,这些查询需要花很长时间才能执行。

示例:

  

| 166 |数据库|连接| 35 |更新|更新xxxx =   'xx'其中xx ='xx'和xx ='xx'| 0.000 |

这些更新查询有时需要20到30秒钟以上的时间才能完成,并且由于复制开始滞后一天之内,因此它将滞后几个小时。奇怪的是,它最终将赶上另一个大师。

该表大约有100MM行,大约70GB。在执行查询的主服务器上,它们花费的时间不到一秒钟。

mysql和服务器这两种配置几乎相同,我们尝试优化表和查询,但到目前为止还没有运气。

有什么建议可以尝试解决吗?让我知道是否能为您提供更多信息。

使用:

MariaDB 10.1.35- CentOS 7.5.1804

1 个答案:

答案 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);

您需要尝试哪种方法更适合您的特定情况。