mysql 从库出现system lock延迟

今天同事说他维护的mysql 的主从 上,从库出现了2个多小时的延迟,

从库 show full processlist;

会看到有一条 state 为system lock 的进程,在执行一条update语句,条件列send_id列上有二级索引。

 

 

查了如下帖子

MySQL:从库出现system lock的原因_老叶茶馆-CSDN博客

他分析的system lock 出现的原因,记录一下,作为以后分析问题的参考。

从库出现system lock 应该视为正在干活,而不是名称看到的“lock”,这是由于slave端不存在语句(row格式)的执行,都是Event的直接apply,状态没有切换的机会,也可以认为是slave端状态划分不严谨,其实做一个pstack就能完全看出问题。下面是产生的必要条件:

1. 由于大量的小事务,比如如UPDATE/DELETE table where处理一行数据,这会出现只包含一行数据库的DML event的语句,如果table是一张大表,则会加剧这种可能。

2. 这个表上没有主键或者唯一键,问题加剧。

3. 由于类似Innodb lock堵塞,也就是slave从库修改了数据同时和sql_thread也在修改同样的数据,问题加剧。

4. 确实I/O扛不住了,可以尝试修改参数。

如果是大量的表没有主键或者唯一键可以考虑修改参数slave_rows_search_algorithms 试试。

 

我认为mysql 主库开了并行,从库sql thread 为单线程,跑批时出现延迟应该正常。

 

posted on 2022-02-14 14:29  JennyYu  阅读(1599)  评论(0编辑  收藏  举报