一、案例分享

1.1 问题描述

大查询长时间执行无法释放DML读锁,后续同步主库的DDL操作获取DML写锁资源被阻塞等待,导致后续同步主库的操作堆积,主从延迟增长严重。从同步延迟的监控来看,延迟从17:11开始,17:51:59进行kill大查询操作,直到17:53建议业务方将大查询kill掉后才结束。

1.2 处理流程

1、当接收到只读实例的同步延迟告警后,登录到RDS的管理控制台查看实例当前会话执行情况,判断只读实例当前负载压力。从当前会话截图可以看到,会话并无明显堆积,但是有两个执行时间很久的大查询操作。

2、17:11延迟开始,17:51 kill大查询,17:53主从延迟恢复。我们仍需要排查这个期间主实例和只读实例的运行情况,分析造成主从延迟的具体原因

3、对主实例的排查

1)查看延迟期间主库是否有一些批处理/大事务操作,主库业务业务请求上涨或者有批量的更新操作。对此,我们主要观察主实例的QPS/TPS监控、MySQL_COMDML和日志读写的监控指标。

从以上截图中可以看到,主库TPS在主从延迟期间并没有明显的上涨,说明期间主库业务压力正常;主库MySQL_COMDML和日志读写在主从延迟期间也没有明显的上涨,说明期间主库也没有执行一些批量更新的大事务操作。

2)查看延迟期间主库是否有执行消耗较大的DDL操作。在RDS中若开启了审计日志,我们可以通过时间以及操作类型进行过滤排查

通过对审计日志的搜索,我们搜查到一条对视图定义进行alter的操作,该alter操作仅仅执行了2.32ms,其资源消耗本身并不大。

4、对只读实例的排查

1)查看延迟期间只读实例是否有较大负载压力,从只读实例延迟期间的会话执行情况以及资源消耗可以知道,延迟期间只读实例并无较大负载压力

2)从只读实例的QPS/TPS监控中可以看到,17:51kill掉大查询后只读实例的TPS异常上涨,17:53TPS恢复正常,延迟恢复。说明17:51~17:53期间只读实例在大量应用主库传输过来的binlog日志,恢复主从复制延迟。

5、捕捉延迟期间会话中的异常现象,大查询长时间执行未结束,执行explain操作显示为MDL锁等待,结合我们在主库审计日志中搜索到的alter操作,我们可以推断造成主从延迟的原因可能是只读实例大查询阻塞了从主库传输过来的Alter操作,导致后续延迟一直上涨,并在我们kill掉大查询后恢复。

6、为了印证我们的猜想,我们通过审计日志把相关操作的时间线进行梳理

  • 只读实例view_order_logistics_new相关的大查询执行了3602s还未执行完,一直持有表的DML读锁,不影响表的正常读写操作
  • 17:10 主库执行了ALTER ALGORITHM=UNDEFINED DEFINER=super_sha_prd_db@% SQL SECURITY DEFINER VIEW view_order_logistics_new 的操作
  • 只读实例view_order_logistics_new的大查询仍在执行中,此时主库执行alter操作传输到只读实例,alter操作需要的DML写锁与大查询持有的DML读锁冲突
  • alter操作无法获取到DML写锁从而开始等待锁资源,从主控传输过来的binlog也被阻塞,主从延迟开始上涨
  • 17:51:59 只读实例kill掉了view_order_logistics_new的大查询,只读实例TPS上涨,只读实例开始应用alter操作之后的所有binlog日志
  • 17:53:08 只读实例TPS恢复,应用延迟期间的binlog完毕,主从复制恢复正常

更多技术信息请查看云掣官网https://www.dtstack.com/dtsmart/

MySQL|主从延迟问题排查(一)的更多相关文章

  1. MySQL主从延迟如何解决?

    我们知道生产环境中经常会遇到MySQL主从延迟问题,从原理上也能看出主库的事务提交是并发模式,而从库只有一个SQL线程负责解析,所以本身上就可能存在延迟. 延迟的主要原因在于: 1.从库的配置往往没有 ...

  2. 架构师必备:MySQL主从延迟解决办法

    上一篇文章介绍了MySQL主从同步的原理和应用,本文总结了MySQL主从延迟的原因和解决办法.如果主从延迟过大,会影响到业务,应当采用合适的解决方案. MySQL主从延迟的表现 先insert或upd ...

  3. 一次线上MySQL主从延迟排查

    今天早上来上班,发现zabbix一直告警主从延迟,mysql slave Seconds_Behind_Master (mysql.slave_status[Seconds_Behind_Master ...

  4. 面试官:咱们来聊一聊mysql主从延迟

    背景 前段时间遇到一个线上问题,后来排查好久发现是因为主从同步延迟导致的,所以今天写一篇文章总结一下这个问题希望对你有用.如果觉得还不错,记得加个关注点个赞哦 思维导图 思维导图 常见的主从架构 随着 ...

  5. mysql主从延迟高的原因

    1.1.1故障1:从库数据与主库冲突 1 2 3 4 5 6 show slave status; 报错:且show slave status\G Slave_I/O_Running:Yes Slav ...

  6. MySQL 主从延迟几万秒 Queueing master event to the relay log(转)

    数据库版本Server version:    5.6.24-log Source distribution 问题描述 数据采集平台业务数据库由于批量灌数据导致主从延迟上万秒. 复制线程长期处于Que ...

  7. MySQL 主从延迟的常见原因及解决方法

    承蒙大家的支持,刚上市的<MySQL实战>已经跃居京东自营数据库图书热卖榜第 1 名,收到的反馈也普遍不错.对该书感兴趣的童鞋可通过右边的链接购买.目前,京东自营有活动,只需 5 折. 主 ...

  8. mysql主从延迟

    1. MySQL数据库主从同步延迟原理.要说延时原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,主 库对所有DDL和DML产生binlog,binlog是顺序写,所 ...

  9. 减少MySQL主从延迟的神器--并行复制大揭密

    1. 简介 MySQL 5.6引入了基于schema的并行复制,即如果binlog events操作的是不同schema的对象,不是DDL,且操作的对象没有对其他schema的foreign key关 ...

  10. mysql主从延迟复制

    需求描述 正常情况下我们是不会有刻意延迟从库的需求的,因为正常的线上业务自然是延迟越低越好.但是针对测试场景,业务上偶尔需要测试延迟场景下业务是否能正常运行. 解决方案 针对这种场景mysql有一个叫 ...

随机推荐

  1. Solution Set -「ARC 124」

    「ARC 124A」LR Constraints Link. 我们可以把 \(1\sim n\) 个盒子里能放的球的编号集合全部求出来.然后就直接来. 注意题目已经给出了 \(k\) 个球的位置,所以 ...

  2. python第2~5章 code

    02基本语法 print('he\aaa\aaa') # 这是一个打印语句,请你看见了不要慌张# 这是一个注释# 注释会被解释器所忽略# print(123+456) 这行代码被注释了,将不会执行pr ...

  3. 文心一言 VS 讯飞星火 VS chatgpt (115)-- 算法导论10.2 8题

    八.用go语言,说明如何在每个元素仅使用一个指针 x.np(而不是通常的两个指针 next和prev)的下实现双向链表.假设所有指针的值都可视为 k 位的整型数,且定义x.np=x.next XOR ...

  4. Prometheus+Grafana实现服务性能监控:windows主机监控、Spring Boot监控、Spring Cloud Alibaba Seata监控

    1.Prometheus介绍 Prometheus使用Go语言开发,中文名称叫:普罗 米修斯.Prometheus是一个开源系统最初在SoundCloud构建的监控和警报工具包.自 2012 年成立以 ...

  5. XML文件的解析--libxml库函数解释

    [c语言]XML文件的解析--libxml库函数解释 2009-09-02 13:12 XML文件的解析--libxml库函数解释 libxml(一)                          ...

  6. Python 如何实现合并 PDF 文件?

    在处理多个 PDF 文档时,频繁地打开关闭文件会严重影响效率.因此,对于一大堆内容相关的 PDF 文件,我们可以先将这些 PDF 文件合并起来再操作,从而提高工作效率.比如,在传送大量的 PDF 文档 ...

  7. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-31-JavaScript的调用执行-上篇

    1.简介 在做web自动化时,有些情况playwright的api无法完成以及无法应对,需要通过或者借助第三方手段比如js来完成实现,比如:去改变某些元素对象的属性或者进行一些特殊的操作,本文讲解pl ...

  8. Jdk_HashMap 源码 —— hash(Object)

    Jdk 源码 HashMap 的源码是在面试中考的算是比较多的,其中有很多高性能的经典写法,也值得多学习学习. 本文是本人在阅读和学习源码的过程中的笔记(不是教程),如有错误欢迎指正. Jdk Ver ...

  9. 如何保证Spring Boot接口安全的呢?

    在保证Spring Boot接口安全时,我们需要关注的主要方面包括:认证(Authentication).授权(Authorization).数据安全性(Data Security).以及防止常见的W ...

  10. C#中的virtual和override关键字

    公众号「DotNet学习交流」,分享学习DotNet的点滴. 使用基类中的引用 代码如下: class MyBaseClass //基类   {        public void Print() ...