mysql创建索引导致死锁,数据库崩溃,完美解决方案
文章目录
- 写在前面
- 一、短事务场景下,执行DDL语句场景分析
- 1、短事务场景下,执行表字段添加操作
- 2、短事务场景下,执行表字段修改操作
- 3、短事务场景下,执行表字段删除操作
- (1)往里添加一条数据试试
- 4、短事务场景下,添加索引操作
- 5、总结
- 二、完美解决方案
- 三、原因分析
- 写在后面
写在前面
DDL语句,就是对数据库对象(数据库、表、列、索引等)进行创建、删除、修改等。
之前分享过一篇mysql创建索引导致死锁,数据库崩溃,mysql的表级锁之【元数据锁(meta data lock,MDL)】全解
通过上一篇文章我们了解到,MySQL有一种表锁叫做元数据锁(meta data lock,MDL)元数据锁,执行DDL时会检查元数据锁并尝试获取。
之前一直以为,只要保证MySQL数据库当前没有长事务,就可以安枕无忧地执行DDL语句,我们天真的认为短事务场景中,DDL语句总是会在上一个事务结束后,获取到元数据锁,并不会有死锁的危险。
但是最近发现!事情并没有想象中的那么简单!就算是没有长事务,MySQL8.0在创建索引的时候,仍然有可能会导致死锁的发生!
我们一起来分析一下。
注!本文操作都是基于mysql 8.0.21,InnoDB引擎,可重复读事务隔离级别下来完成的。
一、短事务场景下,执行DDL语句场景分析
先创建一个表:
CREATE TABLE `lock_test` (`id` int NOT NULL,`name` varchar(20) DEFAULT NULL,`age` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB;
1、短事务场景下,执行表字段添加操作

我们发现,当事务A尚未提交时,事务B、事务C都会处于等待状态。
当事务A一经发起commit命令,事务B紧跟着会进行执行,并执行成功,事务C在事务B之后也会执行成功。
整个过程只有正常的事务等待,并不会发生死锁。
2、短事务场景下,执行表字段修改操作

我们发现,修改字段的场景下和添加字段场景下的结果是一样的。
3、短事务场景下,执行表字段删除操作

当该表无数据时,我们会发现,当事务A执行提交之后,事务B和事务C进入死锁,此时该表的任何SQL语句都无法执行!
此时导致数据库表死锁,数据库SQL堆积越来越多,导致数据库崩溃!
(1)往里添加一条数据试试
INSERT INTO `ourea`.`lock_test`(`id`, `name`, `age`, `column_name`) VALUES (1, '1', 1, '1');

有数据的情况和没有数据的情况,是不一样的!
有数据时,当事务A提交之后,事务C会执行成功,当事务C提交之后,事务B才是最终执行成功。
4、短事务场景下,添加索引操作
还是保持数据库中有数据。
INSERT INTO `ourea`.`lock_test`(`id`, `name`, `age`, `column_name`) VALUES (1, '1', 1, '1');

我们发现,当事务A执行提交之后,事务B和事务C进入死锁,此时该表的任何SQL语句都无法执行!
此时导致数据库表死锁,数据库SQL堆积越来越多,导致数据库崩溃!
5、总结
用事实说话。
通过实例,我们可以看出,即使没有长事务,执行DDL语句仍会导致表死锁。
尤其是对索引的操作,非常危险!
二、完美解决方案
在执行DDL语句之前,通过以下SQL,首先要确保没有长事务:
SELECT * FROM information_schema.INNODB_TRX;
然后,再执行DDL语句之前,先将整表锁住,然后执行DDL语句:

使用如下操作,完美解决死锁问题!
-- 锁整表,加上写锁
lock table lock_test write;
-- 添加索引
CREATE INDEX index_tb ON lock_test(column_name);
-- 解锁
unlock table;
三、原因分析
当对非主键字段更改索引时,其实并不是一个原子操作,会先更新非主键字段索引,然后再更新主键索引。
当我们把主键删掉之后:

这种情况,和当表中有数据,执行表字段删除操作的场景一模一样。
原因是MySQL5.6引入的OnLine-DDL,一个DDL语句其实包含着两个等待操作:
- prepare阶段:尝试获取MDL排他锁,禁止其他线程读写;
- ddl执行阶段:降级成MDL共享锁,允许其他线程读取;
- commit阶段:升级成MDL排他锁,禁止其他线程读写;
- finish阶段:释放MDL锁;
1、3、4如果没有锁冲突,执行时间非常短。第2步占用了DDL绝大部分时间,这期间这个表可以正常读写数据,是因此称为“online ”。
如果第3步升级为MDL写锁的时候,这个表的MDL锁有其他事务占着,那么这个事务会阻塞,等到可以拿到MDL写锁,而且如果不幸一直拿不到,最后锁超时了,就只好回滚这个DDL操作。
所以,DDL语句只有才开始和结束的时候,才会禁止读和写,在语句执行的时候是可以进行读的。
写在后面
如果本文对你有帮助,请点赞收藏关注一下吧 ~

相关文章:
mysql创建索引导致死锁,数据库崩溃,完美解决方案
文章目录写在前面一、短事务场景下,执行DDL语句场景分析1、短事务场景下,执行表字段添加操作2、短事务场景下,执行表字段修改操作3、短事务场景下,执行表字段删除操作(1)往里添加一条数据试试4、短事务场景…...
c++11 标准模板(STL)(std::unordered_map)(八)
定义于头文件 <unordered_map> template< class Key, class T, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator< std::pair<const Key, T> > > class unordered…...
企业ISO体系认证办理,可以自行申请吗?为什么都要找咨询公司?
企业ISO体系认证办理,可以自行申请吗?为什么都要找咨询公司? 很多人认为ISO咨询公司为中介机构,希望直接找认证公司进行认证。其实认证机构担任的是认证审核职责,咨询机构担任的是咨询职责。按中国国家任可监委员会的…...
二、Neo4j源码研究系列 - 单步调试
二、Neo4j源码研究系列 - 单步调试 一、背景介绍 上一篇我们已经把了neo4j的源码准备以及打包流程完成了,本篇将讲解如何对neo4j进行单步调试。对于不了解如何编译打包neo4j的读者,请阅读《一、Neo4j源码研究系列 - 源代码准备》。 大纲: …...
基于Qt WebEngine 的Web仪器面板GUI程控技术
随着IIoT的发展,很多工业仪器也具备了远程管理的GUI。与早期使用串口进行命令交互不同,这些GUI可以直接在远程呈现数据。 作为希望对仪器、软件进行二次开发的小公司来说,会遇到GUI人工操作转自动化的需求。在无法通过串口等传统接口进行自动…...
海康摄像头使用RTSP
1.协议格式。海康威视IP摄像头rtsp协议地址如下:rtsp://[username]:[passwd][ip]:[port]/[codec]/[channel]/[subtype]/av_stream主码流:rtsp://admin:12345192.168.1.64:554/h264/ch1/main/av_streamrtsp://admin:12345192.168.1.64:554/MPEG-4/ch1/mai…...
编程语言分类
目录 ❤ 机器语言 机器语言的编程 ❤ 汇编语言 ❤ 高级语言(编程语言) 编译型 解释型 ❤ 动态语言和静态语言 ❤ 强类型定义语言和弱类型定义语言 ❤ 主流语言介绍 C语言 C java python JavaScript SQL PHP python从小白到总裁完整教程目录:https://blog…...
[nodejs开发] typescript引入js模块或文件
首先更改tsconfig.json 中的compilerOptions属性:"moduleResolution": "Node"假设有一个abc.js其内容如下:var Circle (function () {function Circle() {}Circle.prototype.draw function () {console.log("Cirlce is drawn…...
小帮软件机器人应用于通信集团财务数据填报、编制、稽核、银企对账
某大型通信集团是国有控股通信运营服务提供商,主要从事国内外通信设施服务业务、固定通信业务、移动通信业务、数据通信业务、网络接入业务、卫星国际专线业务和通信业务相关系统集成业务,管辖20多家子(分)公司、服务运营和支持网…...
37. CF-Weights Distributing
链接 这是一个比较经典的题目。容易想到求出两段路径重合的部分,然后贪心的放权值。那么跑三次最短路,枚举重合部分的端点即可。 正解没什么好说的。这题有趣的地方在于,如果数据比较弱,可能会把一些错误做法放过去。 一种错误…...
百丽时尚×优维科技×道客战略启动「云原生一体化项目」
3月7日,由百丽时尚集团(以下简称:百丽时尚)联合优维科技、道客共同举办的「云原生一体化项目启动会」在深圳百丽国际大厦圆满落幕,项目合作三方齐聚一堂,就云原生一体化建设战略方案达成合作共识࿰…...
小诺开源技术
小诺开源技术 文章目录小诺开源技术前言页面演示介绍文档学习建议登录地址下载地址前言 近期接触了小诺开源技术的一个前端框架,底层是蚂蚁框架,感觉很好用,不过需要稍微学习并适应一下,推荐给大家,本篇仅用于学习&am…...
AidLux AI应用案例悬赏选题 | 纺织品表面瑕疵检测
AidLux AI 应用案例悬赏征集活动 AidLux AI 应用案例悬赏征集活动是AidLux推出的AI应用案例项目合作模式,悬赏选题将会持续更新。目前上新的选题涉及泛边缘、机器人、工业检测、车载等领域,内容涵盖智慧零售、智慧社区、智慧交通、智慧农业、智能家居等…...
UE官方教程笔记02-实时渲染基础下
对官方教程视频[官方培训]02-实时渲染基础下 | 陈拓 Epic的笔记没听懂的地方就瞎写反射实时渲染中反射是一个非常有挑战的特性UE中有多种不同的方案,各有各的优势和缺点反射捕获屏幕空间反射平面反射LumenRT Reflection反射捕获在指定位置捕获一张Cube Map需要预计算…...
grep命令——在文件中搜索指定的文本模式
grep是英文词组“global search regular expression and print out the line”的缩写,意思是全局搜索正则表达式,并将结果输出。 通常将grep命令与正则表达式搭配使用,命令选项作为搜索过程中的补充或对输出结果的筛选,命令模式十…...
数据结构刷题(二十二):90子集II、491递增子序列、46全排列
1.子集II题目链接思路:这是一道标准的组合问题数组排序去重。依然是使用回溯。注意:去重代码只需要判断同一树层上是否有重复,同组合总和II(https://blog.csdn.net/xiaomingming99/article/details/129396344)解法&…...
AI+人类,实现高效网络安全
导语 聊天机器人和生成式人工智能(如 ChatGPT)突然成为主流让很多人感到担忧。很多人开始担忧,人工智能取代人的时代已经到来。 幸运的是,事实并非如此。 更有可能的情况是,人类将与 AI 合作创建工作角色的混合模型。…...
牛客小白月赛68【A-E】
文章目录A.Tokitsukaze and New Operation【模拟】B.Tokitsukaze and Order Food Delivery【模拟、特判】C.Tokitsukaze and Average of Substring【暴力、前缀】D.Tokitsukaze and Development Task【记忆化搜索】E.Tokitsukaze and Colorful Chessboard【预处理,二…...
WIFI P2P架构
WI-FI P2P定义架构3个组件组织结构技术标准P2P DiscoveryDevice Discovery(扫描)流程p2p probe 管理帧Group Formation(组网)GO Negotiation(GON)流程P2P Public Action管理帧Provision Discoveryÿ…...
架构师之中台思维_系统发展之路_结果和抽象之间平衡的艺术
父文章 如何成为一名架构师,架构师成长之路_golang架构师成长之路_个人渣记录仅为自己搜索用的博客-CSDN博客 任何系统的发展都是如此. 1. 业务增长 2. 烟囱增长 _ 结果优先 _ 太快去抽象抽象不好 3. 太多的烟囱, 3.1 抽象复用为平台 3.2 面对更多新的业务,提供不同的枚举值…...
别再只做AISMM打分!SITS2026验证:将成熟度等级转化为变革路线图的唯一可复用公式(附动态测算Excel)
更多请点击: https://intelliparadigm.com 第一章:SITS2026案例:AISMM驱动的组织变革 在SITS2026国际航天信息系统技术峰会中,欧洲航天局(ESA)与德国航空航天中心(DLR)联合实施的AI…...
等到删了再后悔已晚!微信自动备份早开早安心
微信里保存着很多重要内容,比如聊天记录、工作文件、照片视频、转账信息、客户沟通记录等。平时看着都在,一旦误删、手机损坏、系统清理,才发现很多资料并没有想象中那么安全。所以,与其等数据丢了再着急恢复,不如提前…...
数据原生流动技术:让AI与控制系统“零延迟握手“
CSDN标签:工业AI 数据原生 云原生 零信任 中控UCS 数据集成 引言:当数据遇上"早高峰" 想象一下,你每天上班必经的那条主干道——平时畅通无阻,一到早高峰就水泄不通。数据在工厂里流动也是如此。 传统的数据集成方案就像用马车在高速公路上运快递:数据从传感器…...
3步完成M9A小助手配置:重返未来1999终极自动化指南
3步完成M9A小助手配置:重返未来1999终极自动化指南 【免费下载链接】M9A 重返未来:1999 小助手 | Assistant For Reverse: 1999 项目地址: https://gitcode.com/gh_mirrors/m9/M9A M9A是专为《重返未来:1999》玩家设计的智能自动化小助…...
Arm Cortex-R82中断控制器架构与虚拟化实现
1. Cortex-R82中断控制器架构概述在嵌入式实时系统和虚拟化环境中,高效的中断管理机制对系统性能至关重要。Arm Cortex-R82处理器集成了符合GICv3/v4架构规范的虚拟化中断控制器,通过一组精心设计的系统寄存器为开发者提供了精细的中断控制能力。作为一款…...
AISMM质量保障不是流程,而是能力:SITS2026定义的6维成熟度诊断模型(附自测工具)
更多请点击: https://intelliparadigm.com 第一章:SITS2026专家:AISMM评估质量保障 AISMM(AI System Maturity Model)是SITS2026国际会议提出的面向生成式AI系统的成熟度评估框架,其核心目标是确保AI系统在…...
通过taotoken cli工具一键配置开发团队的统一模型调用环境
通过taotoken cli工具一键配置开发团队的统一模型调用环境 为开发团队配置统一的大模型调用环境,通常涉及分发API密钥、设置基础URL、选择模型等一系列重复操作。手动配置不仅效率低下,还容易因成员操作差异导致环境不一致。Taotoken CLI工具࿰…...
快手无水印视频下载神器:KS-Downloader 终极使用指南
快手无水印视频下载神器:KS-Downloader 终极使用指南 【免费下载链接】KS-Downloader 快手(KuaiShou)视频/图片下载工具;数据采集工具 项目地址: https://gitcode.com/gh_mirrors/ks/KS-Downloader 还在为下载快手视频时出…...
开源AI Agent编排平台Mission Control:从架构解析到实战部署
1. 项目概述:Mission Control,一个开源的AI Agent编排仪表盘如果你正在寻找一个能让你像指挥一支AI特工小队一样,管理复杂任务的工具,那么Mission Control可能就是你一直在等的那个“指挥中心”。这是一个基于Next.js构建的、功能…...
ASMR资源管理新范式:asmroner如何重新定义音频内容获取体验
ASMR资源管理新范式:asmroner如何重新定义音频内容获取体验 【免费下载链接】asmr-downloader A tool for download asmr media from asmr.one(Thanks for the asmr.one) 项目地址: https://gitcode.com/gh_mirrors/as/asmr-downloader 你是否曾为寻找高质量…...
