MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步

大事务导致从库延迟飙升,因单线程SQL Thread串行回放ROW格式长事务;应分批UPDATE(LIMIT+游标)、避免子查询、用GTID差值等精准监控延迟。大事务为什么让从库延迟飙升主库一个 UPDATE 改 50 万行,binlog 里就是一条长事务日志;从库只能串行回放------不是它不想快,是 MySQL 的复制线程(SQL Thread)默认单线程重放,卡在这条事务上,后面所有日志都得排队。你看到的 Seconds_Behind_Master 突然跳到几千秒,往往就源于此。常见错误现象:SHOW SLAVE STATUS 里 Seconds_Behind_Master 持续上涨、Exec_Master_Log_Pos 几乎不动、Slave_SQL_Running_State 停在 executing event;同时主库 SHOW PROCESSLIST 早结束了,但从库 SHOW PROCESSLIST 还卡着一条 Update_rows_log_event 或 Query_log_event。关键点:不是数据量大就一定慢,而是「单个事务内修改行数多 + 行锁时间长 + binlog 格式为 ROW」三者叠加,最容易触发同步瓶颈。怎么拆?用 LIMIT + WHERE 分批提交,别信 OFFSET直接 UPDATE ... LIMIT 1000 是最常用也最稳妥的拆法,但必须配合确定性排序和游标式推进,否则会漏行或重复。正确姿势:先加索引:确保 WHERE 条件字段有高效索引(比如 status = 'pending',且 status 上有索引)用自增主键或时间戳做游标:比如 WHERE id > 100000 AND status = 'pending' ORDER BY id LIMIT 1000,每次取完记录最大 id,下一轮从它开始每次执行后显式 COMMIT,确保每个分片是独立事务绝对不用 LIMIT 1000 OFFSET 10000:OFFSET 越大越慢,且并发时可能跳过或重复示例片段(伪代码):SET @last_id = 0;WHILE (SELECT COUNT(*) FROM orders WHERE id > @last_id AND status = 'pending') > 0 DO UPDATE orders SET status = 'processed' WHERE id > @last_id AND status = 'pending' ORDER BY id LIMIT 1000; SELECT @last_id := MAX(id) FROM orders WHERE id > @last_id AND status = 'processed' LIMIT 1; COMMIT;END WHILE;ROW 格式下避免全表 UPDATE,尤其带子查询ROW 格式 binlog 会记录每一行变更前后的镜像,如果 UPDATE t1 SET a=(SELECT b FROM t2 WHERE t2.id=t1.id) 扫了 10 万行,binlog 就写 10 万条 Update_rows_log_event,体积暴涨,网络传输+解析都变慢。 AI智研社 AI智研社是一个专注于人工智能领域的综合性平台

相关推荐
!chen7 小时前
数据库主从有延迟怎么处理
数据库·adb
SelectDB技术团队7 小时前
Apache Doris 多云原生实践:SaaS、BYOC 与四大公有云覆盖
数据库·阿里云·云原生·华为云·腾讯云·亚马逊云·写入更新
云飞云共享云桌面9 小时前
医疗器械设备研发:多人同时操作 SolidWorks,怎样依靠单台服务器替代多工作站
运维·服务器·网络·数据库·制造
Sylvia33.9 小时前
LOL实时数据接入深度解析:从WebSocket到完整数据模型
java·网络·python·websocket·网络协议
梦想不只是梦与想9 小时前
Web 服务器网关协议:ASGI 和 WSGI
服务器·python·fastapi
ai小陈11 小时前
PyTorch DataLoader数据加载性能排查:GPU利用率低的实操指南
人工智能·pytorch·python·深度学习·ai·gpu算力
2601_9622992414 小时前
Azure python操作系统列表
python·操作系统·azure·虚拟机·存储配置文件
知行合一。。。14 小时前
RAG--03--Milvus基本用法
数据库·oracle·milvus
TDengine (老段)14 小时前
TDengine 线程模型 — 网络、调度、执行
大数据·数据库·物联网·制造·时序数据库·tdengine·涛思数据
学术 学术 Fun15 小时前
如何用 API 与 Webhook 批量把图表图片转换成 VSDX
python·自动化·api·visio