首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【数据库智能管家DBbrain】MySQL复制延迟从原理到案例分析

    在数据库运维过程中,很多问题都需要靠人力来及时发现和处理,我之前也是一名DBA,可以说我做DBA的那段时间基本没有拥有过完整的属于自己的休息时间,全天候Online。现在AI技术已经广泛运用到了各个领域,数据库运维其实也是同样的,AI可以成为DBA的得力助手,有问题第一时间告警,甚至给出成熟的解决方案,DBA可以用更多的时间去完成高阶的任务。我现在主要负责的产品是DBbrian,是腾讯云推出的一款数据库智能运维工具。今天就以咱们MySQL运维过程中典型的主从延时故障来作为案例,告诉大家可以如何借助智能运维服务更好的发现和解决这类问题。

    04

    Slave SQL线程与PXB FTWRL死锁问题分析

    144 Coordinator线程分发relay log中事务时发现这个事务不能执行,要等待前面的事务完成提交,所以处于waiting for dependent transaction to commit的状态。145/146线程和备份线程162形成死锁,145线程等待162线程 global read lock 释放,162线程占有MDL::global read lock 全局读锁,申请全局commit lock的时候阻塞等待146线程,146线程占有MDL:: commit lock,因为从库设置slave_preserve_commit_order=1,保证从库binlog提交顺序,而146线程执行事务对应的binlog靠后面,所以等待145的事务提交。最终形成了145->162->146->145的死循环,形成死锁。 三个线程相互形成死锁,还是很少见的。 2.2 相关参数为何未生效 --ftwrl-wait-timeout=60 指的是执行FTWRL之前,如果检测到存在长SQL,先等待指定时间(秒),如果超时后还存在长SQL,则备份报错退出。默认为0则表示立即执行。 --ftwrl-wait-threshold=5 指的是执行FTWRL之前,检测长SQL的方法,如果在执行flush前存在已经运行了超过指定时间(秒)的SQL,则将该SQL定义为长SQL,默认60s。 --kill-long-queries_timeout=0 在执行FTWRL后,如果flush操作被阻塞了N秒,则kill掉阻塞它的线程,默认0的情况就是不kill任何阻塞flush的SQL,直到该SQL执行完成。 从上面各个参数的解释,不难看出,--ftwrl-wait-*参数是针对执行FTWRL之前的长SQL检测机制,对于已执行FTWRL时无济于事,--kill-long-*参数则是设置默认值0,不起任何作用。 3. 结论与建议

    01
    领券