记一次备库延迟的案例

简介:  造成主主从复制延迟的原因有很多种,这次我们就讲一个大查询导致主从复制延迟不断增大的案例。

一、问题描述

   造成主主从复制延迟的原因有很多种,这次我们就讲一个大查询导致主从复制延迟不断增大的案例。

二、问题处理

1、发现告警,我们的第一反应去抓取问题现场。我们发现当前会话正在执行几个效率比较差的查询,但当前实例整体负载很低,排除是因为只读实例配置不高,负载大导致的延迟。

_

2、排除只读实例性能问题后,我们猜测是不是因为主实例有大事务或者消耗较大的DDL操作导致了延迟,告警开始是从17:11开始的,所以我们主要排查这个时间段左右主实例是否存在异常。

   1)观察主实例相关性能趋势,发现对应时间段并没有发生什么大事务,排除大事务导致的延迟
   

_

   2)通过SQL审计,我们寻找对应时间段是否存在消耗较大的DDL,通过SQL审计,只观察到一个对视图修改的alter操作,但是这个alter操作仅仅是修改了一视图的定义,执行消耗很小,从执行时间上我们也可以看到,只需要1.9ms,该DDL的执行消耗应该是挺小的,第一反应认为该DDL不会造成这么大的延迟。
   

_

3、在排查问题中,碰到了一个比较诡异的现象。我去查询大查询的执行计划时,会话显示的状态是waiting for table matedta lock,SQL无法获取到MDL锁。所以该MDL锁现在是被谁占用着呢?从该会话界面来看,这些会话显然都不是这个MDL锁阻塞者。

_

4、仔细查看主实例DDL执行成功的时间,以及备库开始出现延迟的时间,发现时间是基本一致的,再结合我们看到的奇怪的MDL锁等待的现象,问题的原因就浮出水面了。

5、17:51:59 延迟仍然没有恢复,kill掉了会话中很久没有执行完的大查询,17:53只读实例延迟恢复。为什么kill掉大查询后延迟就恢复了呢?

二、问题分析

对整个复制延迟以及恢复的流程我们可以概括如下:

1)17:10 主库执行了ALTER ALGORITHM=UNDEFINED DEFINER=xxx@% SQL SECURITY DEFINER VIEW view_order_logistics_new 的一个操作。
   
2)只读实例执行了SELECT view_order_logistics_new的查询,但是SQL效率比较慢,一直在Sending data状态,此时主库执行alter操作传输到只读实例,SQL线程应用relaylog复现主实例的alter操作,但是alter操作需要获取MDL写锁,由于大查询一直处于Sending data状态,alter操作无法获取MDL锁,等待锁资源,此时主实例不断有binlog日志传输过来,造成了只读实例的延迟不断增大。
   
3)17:51:59 只读实例kill掉了view_order_logistics_new的查询,17:53:08 只读实例复制恢复正常。
   

_


_


   
4)17:51:59 - 17:53:08期间只读实例在应用这个期间的所有binlog日志,可以看到这个时间段TPS很高。
   

_

三、总结

   从上面的分析流程以及截图来看,造成只读实例延迟的原因就是大查询阻塞了DDL操作,只要大查询不结束,DDL操作就无法获取到MDL锁,复制延迟就会不断增加。从这个案例中我们可以知道,即使一个DDL的执行时间消耗是很小,它可能带来的代价也是蛮大的。那么针对本案例中的情况,我们如何避免这种情况再次发生呢?
   
   1)DDL尽量在业务低峰执行,避免对线上业务的影响
   
   2)对慢SQL进行优化,提升SQL执行效率
   
   
   

目录
相关文章
|
关系型数据库 MySQL
MySQL错误 -.--secure-file-priv 无导出权限
MySQL错误 -.--secure-file-priv 无导出权限
1059 0
|
机器学习/深度学习 数据可视化 搜索推荐
基于python的汽车数据可视化、推荐及预测系统
本研究围绕汽车数据可视化、推荐及预测系统展开,结合大数据与人工智能技术,旨在提升用户体验与市场竞争力。内容涵盖研究背景、意义、相关技术如 Python、ECharts、协同过滤及随机森林回归等,探讨如何挖掘汽车数据价值,实现个性化推荐与智能预测,为汽车行业智能化发展提供支持。
|
12月前
|
JavaScript Java 关系型数据库
基于springboot的小区车位租售管理系统
针对城市化进程中小区停车难问题,本文设计基于SpringBoot的车位租售管理系统,结合Vue前端与MySQL数据库,实现车位信息数字化、租售流程自动化。系统支持在线查询、申请、支付及数据统计,提升管理效率与用户体验,促进资源优化配置。
|
12月前
|
存储 Java 开发工具
【Git】零基础入门:配置与初始操作实战指南
本文聚焦 Git 的“从 0 到 1”配置与基础操作,旨在帮助 Java 开发者快速掌握环境搭建、用户配置、仓库初始化、代码提交、版本回退等核心技能。内容设计上避免涉及复杂的分支策略或高级命令,以实用为导向,适合零基础入门者系统学习,为后续参与企业级项目开发奠定版本控制基础。
|
安全 Ubuntu Linux
如何安装Linux操作系统?
此时,您可以选择重新启动计算机,然后从硬盘上的Linux系统启动。以上是一个大致的安装过程。请注意,不同的Linux发行版可能会在细节上有所差异,因此在进行安装之前,请确保您阅读并理解了相应发行版的安装指南或文档。
|
机器学习/深度学习 存储 人工智能
深度学习之不遗忘训练
基于深度学习的不遗忘训练(也称为抗遗忘训练或持久性学习)是针对模型在学习新任务时可能会忘记已学习内容的一种解决方案。该方法旨在使深度学习模型在不断接收新信息的同时,保持对旧知识的记忆。
623 4
|
传感器 大数据 数据处理
大数据处理中的流计算技术:实现实时数据处理与分析
【7月更文挑战第30天】随着分布式系统、云原生技术、数据安全与隐私保护技术的不断发展,流计算技术将在更多领域得到应用和推广,为大数据处理和分析提供更加高效、智能的解决方案。
1526 3
|
监控 安全 搜索推荐
企业应用集成(EAI):连接企业系统的技术探索
【6月更文挑战第25天】企业应用集成(EAI)技术连接异构系统,实现数据共享和业务流程优化。EAI包括界面、业务过程、应用和数据集成,提升协同效率、降低成本、改善客户体验、支持创新及强化风险管控。实施涉及规划、需求分析、选择方案、开发测试、部署监控及维护优化。EAI在企业信息化中扮演关键角色。
1555 3
|
Ubuntu 安全 网络安全
Ubuntu中关闭防火墙
Ubuntu中关闭防火墙
1138 2
|
机器学习/深度学习 人工智能 算法
软件测试中的人工智能应用
在当今快速发展的科技世界中,人工智能(AI)已经在各个领域中展现了其强大的影响力。软件测试作为软件开发过程中的关键步骤,也正在逐渐受到AI技术的深刻影响。本文将探讨AI在软件测试中的应用,分析其带来的优势与挑战,并提供一些实际案例来说明这些变化。通过深入理解AI在软件测试中的角色,我们可以预见一个更加高效、智能的软件测试未来。
789 0

热门文章

最新文章