技术分享 | 大事务阻塞 show master status

本文分析了在MySQL主从复制中,大事务执行时如何阻塞`showmasterstatus`命令,导致故障切换的问题。通过详细梳理commit流程和`showmasterstatus`的工作原理,揭示了问题的根源在于lock_log锁的争用。解决方案包括避免大事务和使用`select @@global.gtid_executed`替代`showmasterstatus`获取GTID信息。

作者:王福祥

爱可生 DBA 团队成员,负责客户的数据库故障处理以及调优。擅长故障排查及性能优化。对数据库相关技术有浓厚的兴趣,喜欢分析各种逻辑。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


MySQL 主从复制功能可以搭建从库来为 MySQL 创建一套在线的备份系统,但是自身不能独立实现切换;需要借助第三方高可用工具。然而当自身有大事务在运行时会阻塞一些 show 语句;例如“show master status”,造成误判。

场景模拟

1、构造两千万行数据,以事务的形式删除

2、新建会话执行 show master status ,在 sql 语句运行期间执行成功。在 commit 期间被阻塞。

3、show master status 处于 starting 状态,也就是语句开始执行的第一个阶段,启动阶段,准备资源。

4、查看 stack 信息,show master status 是在获取 lock_log 锁时被阻塞

#6  0x0000000000ee8278 in MYSQL_BIN_LOG::get_currrent_log (this=0x1e839c0 <mysql_bin_log>
如果从服务器的Slave_SQL_Running_State字段的值为"waiting for an event from coordinator",并且时间已经持续了77017秒,说明从服务器正在等待来自主服务器的事件,但该事件一直未到达。这可能是由于主从复制出现了延迟或阻塞,需要进行排查。可以按照以下步骤进行排查: 1. 查看主服务器的状态:使用命令"SHOW MASTER STATUS"查看主服务器的二进制日志文件名和位置信息,确保主服务器的状态正常。 2. 查看从服务器的状态:使用命令"SHOW SLAVE STATUS"查看从服务器的主从复制状态信息,包括Exec_Master_Log_Pos和Slave_IO_Running等字段。如果发现某些字段的值异常,可以进一步排查。 3. 查看主从复制的延迟:使用命令"SHOW SLAVE STATUS"查看从服务器的Seconds_Behind_Master字段,该字段表示从服务器与主服务器的数据同步延迟时间。如果该字段的值较大,说明主从复制出现了延迟或阻塞。 4. 查看从服务器上的进程:使用命令"SHOW FULL PROCESSLIST"查看当前从服务器上的进程列表,查看是否有长时间运行的事务或其他占用资源的进程,如果有,可以尝试终止它们,以解除主从复制的阻塞。 5. 检查网络连接:如果从服务器与主服务器之间存在网络连接问题,也可能导致主从复制的延迟或阻塞。可以使用ping命令检查网络连接是否正常。 总之,需要综合考虑多个方面的因素,来排查主从复制出现延迟或阻塞的原因。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值