当前位置: 首页 > news >正文

技术分享 | MySQL大事务导致数据库卡顿

本文为墨天轮数据库管理服务团队第66期技术分享,内容原创,作者为技术顾问孙文龙,如需转载请联系小墨(VX:modb666)并注明来源。

一、现 象

image.png

业务侧反馈连接数据库异常,报错 connection is not avaliavle

二、分 析

1)在数据库的error日志中没有发现异常,在数据库监控数据中发现当时数据库连接短时间内激增, 但是 活动会话没有明显波动。并且问题时间段产生了一个2GB大小的binlog(max_binlog_size 配置为 1GB),说明这个时间段执行了一个大事务。

解析binlog日志进行确认:

事务开始是的binlog pos 31127469

image.png

事务结束时的binlog pos:1946331810

image.png

也就是说这一个事务产生的binlog将近2GB,修改的数据量大概150万

2)一个事务被记录到binlog时,必须连续、完整的记录到一个binlog文件中, 中间不能插入其它的事务。因此有可能是此大事务导致的故障现象

三、复现

准备

1)将测试数据导入到生产环境,并准备一个update语句,一次修改数据量大概150万

image.png

2)准备一个脚本,循环连接测试数据库并执行一个小事务,用来探测大事务提交时,对小事务的影响。

脚本中计算连接数据库、执行"show master status"、执行update小事务花费的时间, 并且当花费的时间超过1秒时,进行打印。

image.png

3)准备一个用来监控测试数据库会话和事务状态的SQL

image.png

场景1

1)不开binlog

image.png

2) 测试结果

数据库中未发现异常事务, update语句会话状态一直是updating,直到update执行完

image.png

探测脚本中的事务执行时间均为超过1秒

image.png

场景2

1)开binlog ,没有从库

2)测试结果

从数据库会话状态来看,探测脚本中的事务的coommit和 ‘show master status’语句都被大事务的提交阻塞

image.png

从探测脚本的结构也得到印证

image.png

场景3

1)开binlog,并且有增强半同步的从库

2)测试结果

写本地binlog期间,'show master status’和探测脚本中的事务的commit, 都被阻塞。last_wait 都是 LOCK_log

image.png

向从库同步期间,探测脚本中的事务的commit被阻塞,last_wait 为MYSQL_BIN_LOG::LOCK_commit

image.png

image.png

四、结 论

在事务提交写binlog的过程中,其它事务的提交动作已经查看binlog的操作将被阻塞。在事务被同步到从库的过程中, 会阻塞其它事务的提交。


墨天轮从乐知乐享的数据库技术社区蓄势出发,全面升级,提供多类型数据库管理服务。墨天轮数据库管理服务旨在为用户构建信赖可托付的数据库环境,并为数据库厂商提供中立的生态支持。

服务官网:https://www.modb.pro/service

http://www.xdnf.cn/news/589321.html

相关文章:

  • Java—— IO流 第三期
  • 使用 OpenCV 构建稳定的多面镜片墙效果(镜面反射 + Delaunay 分块)
  • MinerU教程第二弹丨MinerU 本地部署保姆级“喂饭”教程
  • Oracle 物理存储与逻辑管理
  • 偏微分方程数值方法指南及AI推理
  • 深入理解Diffusers: 从基础到Stable Diffusion
  • (07)数字化转型之产品材料管理:从基础数据到BOM的全生命周期管理
  • Basic concepts for seismic source - Finite fault model
  • 【 开源:跨平台网络数据传输的万能工具libcurl】
  • DOM API-JS通过文档对象树操作Doc和CSS
  • 【Linux 学习计划】-- makefile
  • shell脚本总结5
  • 当AI遇上科研:北大“科学导航”重塑学术探索全流程
  • LeetCode Hot100 (哈希)
  • x-cmd install | cargo-selector:优雅管理 Rust 项目二进制与示例,开发体验升级
  • OpenCV计算机视觉实战(7)——色彩空间详解
  • 网络图片的缓存和压缩
  • 海康相机---采集图像
  • 如何解决鸿蒙应用闪退问题
  • Flutter 3.32 新特性
  • 鸿蒙Flutter实战:21-混合开发详解-1-概述
  • flutter getx路由管理、状态管理、路由守卫中间件、永久储存get_storage
  • 汇川EasyPLC MODBUS-RTU通信配置和编程实现
  • S7-1500PLC通过工艺对象实现V90总线伺服定位控制(105报文)
  • 英伟达有意入股 PsiQuantum,释放战略转向量子计算的重要信号
  • JVM常量池(class文件常量池,运行时常量池,字符串常量池)
  • Mysql数据库之索引与事务
  • 【内部教程】ISOLAR-AB配置以太网栈|超详细实战版
  • Kotlin与Flutter:跨平台开发的互补之道与实战指南
  • Armadillo C++ 线性代数库介绍与使用