zoukankan      html  css  js  c++  java
  • 从库查询阻塞xtrabackup备份,应该是kill备份还是kill查询的问题

       今天遇到,一个有业务的从库,大查询阻塞了备份。身边有人说,kill掉备份就好了。其实不是的,kill掉备份仍然不能解决阻塞的问题,应该kill掉查询时间最久的那个查询,也不需要kill备份,问题就能解决,测试如下:

    ID为96,这个是最早发起的查询,运行时间可以看到有561秒。

    然后另起一个进程,模拟备份的过程中会执行的语句:FLUSH NO_WRITE_TO_BINLOG TABLES,如下图109,这个时间,会发现109被阻塞,state是waiting for table flush,原因正是因为id为96的查询未结束。

    这个时间,执行kill 109,将备份杀掉,是没有用的,108是属于在备份之后发起的查询,如果没有备份进程,它是可以正常运行的,但由于备份进程执行了flush tables操作,所以它也处于等待状态。有意思的是,虽然kill掉备份,108的等待状态并不会消失。

            这个就涉及到MySQL对MDL锁的管理方式的问题,它属于队列形式,先进先出,这个时候虽然杀掉了109备份程序,但还有96持有锁,108仍会继续等待,所以正确的做法应该是停掉最久的查询(kill 96),备份也不需要停掉,系统可以马上恢复正常。

       其实,更推荐的做法是,修改备份程序,增加如下的参数,kill-long-query--type='select',--kill-long-queries-timeout=1000,让备份程序自动杀掉大于1000秒的大查询。

    这个能降低备份阻塞后面的查询的概率,但并不能完全避免,如果要完全避免,建议专门拿一个没业务的从库来给备份使用,或者备份遇到大查询时,自动停止备份。

       

  • 相关阅读:
    [TJOI2013]单词
    [AHOI2005]病毒检测
    [SCOI2016]围棋
    [SDOI2008]Sandy的卡片
    [POI2005]Sza-Template
    [Usaco2015 Feb]Censoring
    浅谈算法——KMP
    yii2邮件配置教程,报Expected response code 250 but got code "553"原因
    yii2设置发送邮件的一些配置
    js 的正则表达式 部分展示test()方法的验证功能
  • 原文地址:https://www.cnblogs.com/tonnyChen/p/10529105.html
Copyright © 2011-2022 走看看