【发布时间】:2018-07-11 11:09:56
【问题描述】:
我们有一个带有副本的 MySQL(5.7 带有基于行的复制)。
现在,主节点每秒执行大约 3000 次插入,而副本似乎读取得很好。但是,有时我们会执行长时间的选择查询(运行时间为 10 到 20 秒)。在这些查询期间,复制延迟变得非常大。
我不明白的是,执行 selects(不锁定任何表)的常用 mysql 线程如何导致复制线程变慢(即它执行大约 2.5K 插入而不是像 master 那样执行 3K)?我需要精确调整什么?
现在我检查了从属的状态,这与 IO 线程无关——这个线程可以很好地从主控读取事件。它是 SQL 从属线程,不知何故无法赶上。隔离级别是已提交读,因此选择查询可能会锁定一些记录并使从属线程等待。但我不确定。
更新。我再次检查了 - 结果表明,即使是从属服务器上的一个繁重的查询(例如扫描整个表)也会产生滞后。好像slave sql线程被阻塞了,但我不明白为什么?
更新 2。我终于找到了解决方案。首先,我将 slave_parallel_workers 的数量增加到 4 并将 slave_parallel_type 设置为 LOGICAL_CLOCK。但是,这很重要,这根本没有给我任何改进,因为交易是依赖的。但是,在我将 master binlog_group_commit_sync_delay 增加到 10000(即 10 毫秒)后,延迟消失了。
【问题讨论】:
标签: mysql