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

DDL期间TDSQL异常会话查询造成数据库主备切换

问题描述:

    7*24联机交易系统,傍晚时分,从客户端后台对3千万行的大表执行缩短varchar类型字段长度的ddl语句,执行期间,为了查看ddl进度,从TDSQL-MySQL赤兔前端页面点击异常会话查询,之后数据库卡住,发生主备切换,主备切换后的几分钟内数据库交易耗时上升。

问题分析:

   查看tdsql记录的processlist的日志,发现ddl语句之后,就是对performance_schema.data_locks试图的查询语句,其余sql语句都阻塞在该data_locks查询sql后面。点击查看主备切换原因,是因为心跳检测中断时间超过20s,数据库误以为主库挂掉,发起主备切换。

原因总结:

    从客户端后台执行ddl语句时,会对全表加行锁,由于该实例为分布式实例,每一个set行数为500万行左右。在TDSQL-MySQL赤兔前端页面点击异常会话查询,会使用到performance_schema.data_locks视图,查询data_locks视图时,首先需要获取trx_sys->mutex这个信号量,获取到trx_sys->mutex后扫描trx_sys结构下面trx_lock_list和mysql_lock_list两个记录锁信息的双向链表,当扫描到执行ddl语句的表的锁信息时,要等把这个表的所有行锁信息扫描完后才会释放trx_sys->mutex互斥量,扫描时间过长造成trx_sys->mutex长时间未释放。其他dml语句在执行时,也需要申请trx_sys->mutex互斥量,向trx_sys结构中的事务链表注册一个事务。但data_locks视图异常会话持有的trx_sys->mutex长时间未释放,使得其余dml语句获取不到trx_sys->mutex被阻塞,这其中就包括心跳检测的dml语句,心跳检测sql中断超过20s,TDSQL数据库认为主库挂掉,发起主备切换。

解决方案:

    1、执行ddl时,避开业务高峰期。

    2、从赤兔前端执行ddl操作,使用到pt工具执行online ddl。

    3、执行ddl语句时,谨慎使用异常会话查询功能。

http://www.dtcms.com/a/272521.html

相关文章:

  • linux环境下安装和配置MySQL数据库
  • 关于市场主流自动化测试工具和框架的简要介绍
  • MySQL主键深度解析:数据库设计的核心基石
  • Java学习---JVM(1)
  • 字节跳动高质量声音克龙文字转语音合成软件MegaTTS3整合包
  • 依存句法分析:语言结构的骨架解码器
  • 岛津液相色谱仪配置RF-20AXS荧光检测器的测试安装,校准
  • Ansible:强大的自动部署工具
  • SPGAN: Siamese projection Generative Adversarial Networks
  • 开源 Canvas 和 WebGL 图形库推荐与对比
  • OpenCV 4.10.0 移植 - Android
  • 跨境电商税务解决之道:在合规航道上驶向全球市场
  • Elasticsearch 简介
  • 集成CommitLInt+ESLint+Prettier+StyleLint+LintStaged
  • 节日庆典儿童节婚庆运动会劳动节PPT模版
  • Android Studio 打 release 包 Algorithm HmacPBESHA256 not available 问题解决
  • 【arXiv 2025】新颖方法:基于快速傅里叶变换的高效自注意力,即插即用!
  • 多样化消费摄像头监控功能
  • pdf_copy.ahk
  • 用 LangChain4j 从零实现 RAG:基于 PDF 文档的智能问答系统
  • 《信号与系统》学习笔记——第八章(补充部分)
  • 缺乏日常项目进度例会机制,如何系统推进
  • 基于大模型的膀胱癌全周期精准诊疗方案研究
  • GitHub敏感信息收集与防御指南
  • 【音视频】TS协议解析
  • 音频 SDP 文件格式
  • 基于多模态感知的裂缝2D及3D检测方案
  • Boost.Asio学习(3):异步读写
  • windows对\和/敏感吗?
  • 小白成长之路-NFS文件存储及论坛项目搭建(php)