暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

xtrabackup备份从库导致死锁问题分析

1896

收到告警,有两个一主两从set的从库主从延迟
登录到从库,show slave status查看主从状态,IO 线程和 SQL 线程的状态都是 YES。
show processlist 查看正在运行线程
图片.png

1、从上图看到2596150正在执行xtabackup的flush tables with read lock。

2、26是并行复制的Coordinator线程。

3、27/28/29是并行复制的worker线程。27/28/29worker线程队列中的事务可以并行执行。

4、26Coordinator线程分发relaylog中事务时发现这个事务不能执行,要等待前面的事务完成提交,所以处于waiting for dependent transaction to commit的状态。是当前事务无法和正在回放的事务并发回放出现的等待。

5、29线程Waiting for preceding transaction to commit,是当前并发回放的事务在进入commit时的flush队列前,必须等到先前事务已经进入flush队列而引起的等待。从库设置slave_preserve_commit_order=ON,保证从库binlog提交顺序,而29线程执行事务对应的binlog靠后面,所以等待27/28的事务提交。

6、2596150占有全局读锁,获取全局commit锁的时候进入阻塞,等待29释放事务涉及到表的commit锁。

7、27/28/29线程和备份线程2596150形成死锁。27/28线程等待2596150线程 global read lock 释放,2596150线程占有MDL::global read lock 全局读锁,申请全局commit lock的时候阻塞等待29线程,29线程占有MDL:: commit lock,最终形成了27/28->2596150->29->27/28的死循环,形成死锁。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
2人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论