MySQL 主从架构下怎么处理大事务导致阻塞

尊渡假赌尊渡假赌尊渡假赌

尊渡假赌尊渡假赌尊渡假赌

2026-07-13

300人浏览

原创

大事务卡住sql线程是因为从库必须串行执行完整事务才能推进位点,导致seconds_behind_master飙升、exec_master_log_pos停滞;根治方法是主库端按主键或时间分段、每批5000–10000行、显式begin/commit拆分,并确保slave_parallel_type=logical_clock以激活并行复制。

mysql 主从架构下怎么处理大事务导致阻塞

大事务在主从架构下会卡住 SQL 线程,不是网络慢或磁盘慢,而是从库必须等整个事务执行完才能推进位点——Seconds_Behind_Master 会飙升,但 Exec_Master_Log_Pos 几乎不动。解决关键不在调参,而在源头拆分 + 正确回放。

先确认是不是大事务卡住

别只看延迟数值。在从库执行 SHOW SLAVE STATUS\G,重点盯三处:

  • Slave_SQL_Running_State 显示 Waiting for dependent transaction to commit 或长时间停在 Reading event from the relay log
  • Exec_Master_Log_Pos 长时间不变化,和 Read_Master_Log_Pos 的差距持续拉大
  • Seconds_Behind_Master 稳定上涨(比如每秒+1、+2),不是跳变

再查主库有没有活跃大事务:
SELECT trx_id, trx_started, trx_rows_modified, SUBSTRING(trx_query, 1, 50) FROM information_schema.INNODB_TRX WHERE trx_rows_modified > 10000 AND trx_started <br> 有结果,基本就是它了。

主库端必须拆分,不能只靠从库优化

并行复制对单个大事务无效——它被当作一个原子单元串行回放。真正有效的动作在主库:

MySQL(Linux)
MySQL(Linux)

MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。

下载
  • INSERT/UPDATE/DELETE 加 LIMIT 不等于拆事务:必须显式 BEGIN + COMMIT 包裹每一批,否则仍是隐式小事务堆叠,binlog 更大、relay log 更快堆积
  • 用主键或时间字段分段:比如 WHERE id BETWEEN ? AND ?WHERE created_at > ? AND created_at ,避免 <code>OFFSET 导致越跑越慢
  • 每批控制在 5000–10000 行以内,单次执行不超过 2 秒;中间可加 SLEEP(0.1) 缓冲压力
  • DDL 大操作必须用 pt-online-schema-change 或 gh-ost,原生 ALTER TABLE 在从库仍要单线程执行,延迟直接等于主库耗时

检查并行复制是否真生效

开了 slave_parallel_workers > 0 不代表并行就跑起来了:

  • slave_parallel_type 必须是 LOGICAL_CLOCK(5.7+)或 WRITESET(8.0+),设成 DATABASE 没用——大事务通常集中在单库单表
  • 主库 binlog_format 必须为 ROW,STATEMENT 模式下函数、临时表等可能让拆分失效
  • 查从库:SELECT * FROM performance_schema.replication_applier_status_by_worker;LAST_SEEN_TRANSACTION 是否有多个非空值;全为空说明并行没跑起来

警惕“伪大事务”

代码里没写 BEGIN,但循环中反复 INSERT/UPDATE 又不 COMMIT,autocommit=1 时每句都是独立事务——看着小,实际因网络延迟、锁竞争、日志刷盘等,整体效果等同于大事务:

  • ORM 批量操作(如 Django bulk_create、MyBatis foreach)需显式指定 batch_size=1000
  • ETL 工具(DataX、Flink CDC)的 batchSizemaxFetchSize 必须对齐,否则一次拉 10 万行再逐条发 INSERT,binlog 体积翻倍
  • 定时脚本中漏写 COMMIT 或异常未 ROLLBACK,也会让事务悬停几十分钟

不复杂但容易忽略的是:大事务问题从来不是复制机制的缺陷,而是业务写法、开发习惯和运维监控共同作用的结果。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

mysql

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

335

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

616

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

1192

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

428

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

324

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

190

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

1008

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

1800

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

321

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 121人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 221人学习

phpEnv手册
phpEnv手册

共0课时 | 0人学习