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 为单线程,跑批时出现延迟应该正常。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?