代码之家  ›  专栏  ›  技术社区  ›  SPIRiT_1984

为什么长时间运行的select查询会导致MySQL从属数据库中的复制延迟?

  •  1
  • SPIRiT_1984  · 技术社区  · 7 年前

    我们有一个带副本的MySQL(5.7带基于行的复制)。

    现在,主机以每秒3000次插入的峰值运行,而副本的读取速度似乎很好。但是,有时我们会执行长时间的select查询(运行时间为10到20秒)。在这些查询过程中,复制延迟变得非常大。

    我不明白的是,通常执行SELECT(不锁定任何表)的mysql线程是如何导致复制线程速度减慢的(即,它执行大约2.5K的插入,而不是像master那样执行3K的插入)?我到底需要调什么?

    更新 .我又检查了一遍-结果发现,即使是从机上的一个繁重查询(例如扫描整个表)也会产生延迟。看起来从sql线程被阻塞了,但我不明白为什么?

    .我终于找到了解决办法。首先,我将从并行工作者的数量增加到4,并将从并行类型设置为逻辑时钟。然而

    1 回复  |  直到 7 年前
        1
  •  2
  •   shawkinaw    6 年前

    mysql从数据库中复制延迟的原因可能有很多。 但正如你提到的

    Percona


    例如,如果针对MyISAM表的长时间运行的读取阻塞了SQL线程,或者针对InnoDB表的任何事务都会在SQL线程中创建IX锁并阻塞DDL。另外,考虑到MySQL 5.6之前的从机是单线程的,这可能是从机SQL_线程延迟的另一个原因 .