【问题标题】:MariaDB update query taking a long timeMariaDB 更新查询需要很长时间
【发布时间】:2018-09-06 07:02:06
【问题描述】:

我目前在使用 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

【问题讨论】:

    标签: mariadb replication


    【解决方案1】:

    关键在于你更新了多少行:

    • 如果百分比较低(小于 5% 的行),则索引可以提供帮助。

    • 否则,如果要更新大量行(大于 5%),则全表扫描将是最佳选择。如果您有数百万行,这将很慢。也许对表进行分区可能会有所帮助,但我想说你改进它的机会很小。

    我将假设您正在更新一小部分行,因此您可以使用索引。查看WHERE 语句中的条件。如果它看起来像这样:

    哪里 col1 = 'xx' 和 col2 = 'yy'

    然后,这些列上的索引将使您的查询更快。具体来说:

    create index ix1 on my_table (col1, col2);
    

    根据列的选择性,翻转索引可能会更快:

    create index ix2 on my_table (col2, col1);
    

    您需要尝试哪一种更适合您的具体情况。

    【讨论】:

    • 同时使用两列时,它们的相对选择性对指定索引的顺序没有没有影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 2018-01-09
    • 2015-05-17
    • 1970-01-01
    相关资源
    最近更新 更多