MySQL 的一种特殊的死锁

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

回顾一下线上数据库(5.1.68)的CASE,高峰期的时候出现了大量的thread_running,发现基本上线程处于deadlock状态,涉及到的只有一张表,并且只有一行:

table a

(`id` smallint(5) unsigned NOT NULL DEFAULT'0',

`key` varchar(32) NOT NULL,

`value` varchar(32) NOT NULL,

`time` int(10) unsigned NOT NUL)engine=innodb;

数据库的版本是5.1.68 innodb-plugin;原来的逻辑是:

Lock table awrite;读取并更新该表;unlocktable;

后来改了逻辑begin;select id,key,value from a for update;更新;commit;

而出现问题的时候这2个逻辑同时存在,这就造成了MySQL Server层和Storage层的死锁;

一种时序如下

Session1:

begin;

Select * from a for update ; -- lock everyrow in execlusive mode


Session2:

Lock table a write; -- lock table a in server


Session2:

Update a set key=xxx where id=xxx –-holdserver lock and acquire row lock

Session1:

同上;--hold row lock andacquire server lock

因此发生了死锁;原因是RD发布代码只发布了一部分,后来回滚解决了;另外一个Solution就是将该表改成MyISAM引擎,这样就破除了row lock;

不过这个问题在5.5通过引入MDL解决了,当这里session2执行lock table t write时会被阻塞在:Waiting for table metadata lock 上,打破了死锁条件


本文转自MIKE老毕 51CTO博客,原文链接:http://blog.51cto.com/boylook/1298750,如需转载请自行联系原作者


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
MySQL死锁及源码分析!
MySQL死锁及源码分析!
MySQL死锁及源码分析!
|
3月前
|
SQL 关系型数据库 MySQL
案例剖析:MySQL唯一索引并发插入导致死锁!
案例剖析:MySQL唯一索引并发插入导致死锁!
266 0
案例剖析:MySQL唯一索引并发插入导致死锁!
|
3月前
|
SQL 关系型数据库 MySQL
案例剖析,MySQL共享锁引发的死锁问题!
案例剖析,MySQL共享锁引发的死锁问题!
|
30天前
|
存储 关系型数据库 MySQL
从新手到高手:彻底掌握MySQL表死锁
通过本文的介绍,希望你能深入理解MySQL表死锁的概念、原因、检测方法及解决方案,并在实际开发中灵活应用这些知识,提升系统的稳定性和性能。
217 9
|
5月前
|
SQL 关系型数据库 MySQL
遇到mysql数据库死锁,你会怎么排查?
遇到mysql数据库死锁,你会怎么排查?
380 0
|
2月前
|
SQL 算法 关系型数据库
面试:什么是死锁,如何避免或解决死锁;MySQL中的死锁现象,MySQL死锁如何解决
面试:什么是死锁,死锁产生的四个必要条件,如何避免或解决死锁;数据库锁,锁分类,控制事务;MySQL中的死锁现象,MySQL死锁如何解决
|
3月前
|
关系型数据库 MySQL 数据库
一个 MySQL 数据库死锁的案例和解决方案
本文介绍了一个 MySQL 数据库死锁的案例和解决方案。
224 3
|
4月前
|
监控 关系型数据库 MySQL
MySQL锁机制与解决死锁问题
MySQL锁机制与解决死锁问题
373 5
|
3月前
|
监控 关系型数据库 MySQL
一次彻底讲清如何处理mysql 的死锁问题
【10月更文挑战第16天】本文详细介绍了如何处理 MySQL 中的死锁问题,涵盖死锁的概念、原因、检测方法及解决策略,强调通过优化事务设计、调整数据库参数、手动处理和预防措施等手段,有效减少死锁,提升数据库性能与稳定性。
618 0
|
5月前
|
存储 SQL 关系型数据库
深入MySQL锁机制:原理、死锁解决及Java防范技巧
深入MySQL锁机制:原理、死锁解决及Java防范技巧