iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >如何处理MySQL死锁问题
  • 924
分享到

如何处理MySQL死锁问题

2024-04-02 19:04:59 924人浏览 安东尼
摘要

小编给大家分享一下如何处理Mysql死锁问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! mysql里的锁兼容列表大体是这样

小编给大家分享一下如何处理Mysql问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

mysql里的锁兼容列表大体是这样的关系,如果第一次看会有些晕,感觉抓不住重点,其实有一点小技巧。

首先InnoDB实现了两种类似的行锁,即S(共享锁)和X(排他锁),而InnoDB层面的表级意向锁有IS(意向共享锁)和IX9意向排他锁),意向锁之间是互相兼容的,这句话很重要,按照这个思路里面一半的内容就明确了。而另外一部分则是S和X的兼容性。带着S锁和X锁的组合都是互相排斥,只有一类场景例外,那就是都是S锁,是兼容的。所以这个图按照这个思路几乎不用记就能基本理解了。

如何处理MySQL死锁问题

看起来S锁的组合是很柔和的,从这种场景来看保持兼容,那么出死锁的概率应该很低吧,其实在RR,RC隔离级别下我们可以逐步扩展然后举一反三。

如果S锁的组合在两个会话中是互相兼容,那么接下来的X锁的组合就是互相排斥的。

如何处理MySQL死锁问题

那么在两个会话并发的场景下,死锁的步骤如下:

mysql> create table dt1 (id int unique

Query OK, 0 rows affected (0.03 sec)

会话1:

begin;

select *from dt1 lock in share mode; --显式共享锁

会话2:

begin;

select *from dt1 lock in share mode; --显式共享锁

会话1:

insert into dt1 values(1); --阻塞

会话2:

insert into dt1 values(2); --触发死锁

所以上面的语句特点很明显,插入的数据分别是1和2,看起来互补冲突也不行。

我们进度稍快一些,我们可能很少看到直接声明share mode的方式,但是有很多时候由其他的场景会触发,其中的一个主要原因就在于对于duplicate数据的检查会开启S锁。这是比较特别的一点,需要注意。

按照这一点来扩展,很容易就可以扩展到3个会话中。

会话1只是负责插入一条数据,会话2,3也紧接着插入一条记录(会话2,3自动提交),但是因为唯一性索引的检查,会导致会话2和会话3都开启了S锁,因为兼容,所以暂时还没影响。如果会话1正常提交,会话2,3的检查会生效,导致数据插入不了,违反唯一性约束,但是我们反其道而行,就可以用一个rollback来释放锁,紧接着会话2和会话3都会获得S锁成功,紧接着获得X锁,细节算法就不说了。这个时候互相阻塞,导致会话3产生死锁,会话2的数据插入依然会成功。

会话1:

begin;

insert into dt1 values(1);

会话2:

insert into dt1 values(1);

会话3:

insert into dt1 values(1);

会话1:

rollback;

看起来很精巧的小测试,但是里面蕴含这大道理,比如按照这个思路,如果后面的两个语句都是delete,也会触发死锁。有的时候我们可以正面来图例,或者通过死锁日志来推理。给我的一个启发是太极。

如何处理MySQL死锁问题

放在锁的角度来理解就会好很多。

用一张不太形象的图表示就是,左边的部分是insert操作在会话1中,右边的是在会话2和会话3中,都持有S锁,然后会因为同样的原因事务回滚后,他们的S锁会升级为X锁导致死锁发生。

如何处理MySQL死锁问题

按照这个思路,我们可以继续扩展出几个场景。比如delete的方式。

如何处理MySQL死锁问题

按照这样的思路,可以构建出很多的死锁场景来。

以上是“如何处理MySQL死锁问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: 如何处理MySQL死锁问题

本文链接: https://www.lsjlt.com/news/63312.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何处理MySQL死锁问题
    小编给大家分享一下如何处理MySQL死锁问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! MySQL里的锁兼容列表大体是这样...
    99+
    2024-04-02
  • Mysql如何解决死锁问题
    这篇文章主要为大家展示了“Mysql如何解决死锁问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Mysql如何解决死锁问题”这篇文章吧。 ...
    99+
    2024-04-02
  • 如何解决MySQL死锁问题
    这篇文章主要介绍“如何解决MySQL死锁问题”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何解决MySQL死锁问题”文章能帮助大家解决问题。1、什么是死锁死锁是并...
    99+
    2024-04-02
  • 阿里面试MySQL死锁问题的处理
    目录1、什么是死锁2、InnoDB 锁类型2.1、间隙锁( gap lock ) 2.2、next-key lock2.3、意向锁( Intention lock )2.4...
    99+
    2024-04-02
  • 怎么理解MySQL wwwhj8828coml8o88O49999死锁问题
    本篇内容介绍了“怎么理解MySQL wwwhj8828coml8o88O49999死锁问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希...
    99+
    2024-04-02
  • 多线程update导致的mysql死锁问题处理方法
    最近想起之前处理过的一个mysql 死锁问题,是在高并发下update批量更新导致的,这里探讨一下发生的原因,以及解决办法; 发生死锁的sql语句如下,其中where条件后的字段是有复合索引的。 update t_push_mes...
    99+
    2023-09-06
    数据库 java 开发语言 mysql死锁问题 mysql
  • 【mysql】mysql死锁问题解决方案
    mysql死锁问题解决方案 查询出是被哪个进程给锁住了为什么会产生死锁日志内容:日志解析:找到问题: 解决方案 查询出是被哪个进程给锁住了 执行sql: select ...
    99+
    2023-09-23
    mysql adb 数据库
  • 怎样解决Mysql死锁问题
    怎样解决Mysql死锁问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 show engine in...
    99+
    2024-04-02
  • C#开发中如何处理程序崩溃和死锁问题
    C#开发中如何处理程序崩溃和死锁问题,需要具体代码示例在C#开发过程中,程序崩溃和死锁问题是常见的挑战。处理这些问题是保证程序运行稳定和高效的关键,因此,本文将介绍如何处理程序崩溃和死锁问题,并提供一些具体的代码示例。程序崩溃问题处理程序崩...
    99+
    2023-10-22
    异常处理 崩溃恢复 死锁解决
  • C#开发中如何处理并发编程和死锁问题
    C#开发中如何处理并发编程和死锁问题,需要具体代码示例摘要:并发编程是现代软件开发中的重要主题,但也带来了一些挑战,例如线程安全、竞态条件和死锁等问题。本文将重点讨论在C#开发中处理并发编程和死锁问题的一些方法,并给出具体的代码示例。引言:...
    99+
    2023-10-22
    并发编程 (Concurrency Programming) 死锁问题 (Deadlock problem) 处理方法
  • Mysql并发插入死锁问题
    文章目录 一、问题二、复现表结构执行顺序死锁信息 三、死锁原因四、修改代码FA&QReference 一、问题 线上数据库版本,隔离级别:5.6.36-log,REPEA...
    99+
    2023-10-10
    mysql 数据库 sql 死锁
  • Mysql如何使用kill命令解决死锁问题
    这篇文章给大家介绍Mysql如何使用kill命令解决死锁问题,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在使用mysql运行某些语句时,会因数据量太大而导致死锁,没有反映。这个时候,...
    99+
    2024-04-02
  • 处理和优化 MySQL 死锁锁定
    很抱歉,由于技术限制,我无法提供具体代码示例。但是我可以帮你提供一个讲解MySQL锁、死锁处理与优化的大纲,供你参考。MySQL 锁的死锁处理与优化一、MySQL锁的分类读锁(共享锁)写锁(排它锁)二、死锁概念什么是死锁死锁产生的条件如何避...
    99+
    2023-12-21
    MySql锁 死锁处理 锁优化
  • 初学者从源码理解MySQL死锁问题
    通过好多个深夜艰难的单步调试,终于找到了一个理想的断点,可以看到大部分获取锁的过程 代码在lock0lock.c的static enum db_err lock_rec_lock() 函数中,这个函数会显示...
    99+
    2024-04-02
  • Mysql超详细讲解死锁问题的理解
    目录1、什么是死锁?2、Mysql出现死锁的必要条件资源独占条件请求和保持条件不剥夺条件相互获取锁条件3、 Mysql经典死锁案例3.1 建表语句3.2 初始化相关数据3.3 正常转...
    99+
    2024-04-02
  • 死锁问题详解
    目录前言资源可抢占资源和不可抢占资源资源获取死锁资源死锁的条件死锁模型鸵鸟算法死锁检测和恢复从死锁中恢复通过抢占进行恢复通过回滚进行恢复杀死进程恢复死锁避免单个资源的银行家算法破坏死...
    99+
    2024-04-02
  • 如何解决Task.Result就死锁的问题
    如何解决Task.Result就死锁的问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、背景1. 讲故事前些天把 .NET...
    99+
    2024-04-02
  • Process的waitFor死锁问题如何解决
    本篇内容主要讲解“Process的waitFor死锁问题如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Process的waitFor死锁问题如何解决”吧!Process的waitFor死...
    99+
    2023-06-22
  • MySQL是怎么处理死锁的
    小编给大家分享一下MySQL是怎么处理死锁的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、什么是死锁官方定义如下:两个事务都持有对方需要的锁,并且在等待对方释放,并且双方都不会释放自己...
    99+
    2024-04-02
  • Golang的高并发场景中如何处理死锁和饥饿问题?
    死锁与饥饿在 go 并发编程中的成因和解决方法:死锁:由递归锁引起,避免方法是采用死锁避免算法。饥饿:由优先级反转引起,解决方法是使用优先级继承机制,让低优先级线程暂时获取高优先级线程的...
    99+
    2024-05-10
    死锁 饥饿 golang
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作