返回顶部
首页 > 资讯 > 数据库 >mysql insert导致死锁的案例介绍
  • 135
分享到

mysql insert导致死锁的案例介绍

2024-04-02 19:04:59 135人浏览 泡泡鱼
摘要

本篇内容介绍了“Mysql insert导致死锁的案例介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!两

本篇内容介绍了“Mysql insert导致死的案例介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

两个insert语句发生死锁的案例。

一. 准备数据

CREATE TABLE `t1` (
`a` int(11) NOT NULL,
PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
insert into t1 values(1);
mysql> insert into t1 values(1);
Query OK, 1 row affected (0.20 sec)
mysql> select * from t1;
+---+
| a |
+---+
| 1 |
+---+
1 row in set (0.00 sec)

二. 发起如下事务

会话1

会话2

会话3

begin;

delete from t1 where a=1;




begin;

insert into t1 select 1;




begin;

insert into t1 select 1;

Commit





ERROR 1213 (40001): Deadlock found when   trying to get lock; try restarting transaction

简单理解下,删除数据的会话持有X锁,导致两条insert语句需要等待,这没问题,

但是为什么删除提交后,两个竞争关系出现了死锁。

show engine innodb status部分结果:

------------------------
LATEST DETECTED DEADLOCK
------------------------
2020-05-17 13:50:24 0x7f660c3f0700
*** (1) TRANSACTION:
TRANSACTION 4377, ACTIVE 13 sec inserting
mysql tables in use 1, locked 1
LOCK WaiT 3 lock struct(s), heap size 1136, 2 row lock(s)
MySQL thread id 3, OS thread handle 140076399294208, query id 59 localhost root executing
insert into t1 select 1
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 99 page no 3 n bits 72 index PRIMARY of table `ming`.`t1` trx id 4377 lock_mode X locks rec but not gap waiting
Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact fORMat; info bits 32
 0: len 4; hex 80000001; asc     ;;
 1: len 6; hex 000000001114; asc       ;;
 2: len 7; hex 3400000144129f; asc 4   D  ;;
*** (2) TRANSACTION:
TRANSACTION 4378, ACTIVE 10 sec inserting, thread declared inside InnoDB 1
mysql tables in use 1, locked 1
3 lock struct(s), heap size 1136, 2 row lock(s)
MySQL thread id 4, OS thread handle 140076268848896, query id 61 localhost root executing
insert into t1 select 1
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 99 page no 3 n bits 72 index PRIMARY of table `ming`.`t1` trx id 4378 lock mode S
Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format; info bits 32
 0: len 4; hex 80000001; asc     ;;
 1: len 6; hex 000000001114; asc       ;;
 2: len 7; hex 3400000144129f; asc 4   D  ;;
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 99 page no 3 n bits 72 index PRIMARY of table `ming`.`t1` trx id 4378 lock_mode X locks rec but not gap waiting
Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format; info bits 32
 0: len 4; hex 80000001; asc     ;;
 1: len 6; hex 000000001114; asc       ;;
 2: len 7; hex 3400000144129f; asc 4   D  ;;
*** WE ROLL BACK TRANSACTION (2)

可以看到会话2正在等待一个X行锁,会话3也在等待X行锁,但是同时持有一个S锁。

这个S锁是怎么来的呢?

当进行唯一性冲突检测时,需要先加一个 S 锁。

那么整个过程就是如下所示

会话1

会话2

会话3

begin;

delete from t1 where a=1;

持有a=1就的X行锁




begin;

insert into t1 select 1;

为了判断唯一性,请求a=1的next-key   lock S锁被阻塞,等待




begin;

insert into t1 select 1;

为了判断唯一性,请求a=1的next-key   lock S锁被阻塞,等待

Commit

释放a=1上的锁




拿到a=1的next-key lock   S锁,继续尝试拿a=1的X 行锁,但是被会话3的S锁阻塞

拿到a=1的next-key lock   S锁,继续尝试拿a=1的X 行锁,尝试拿到a=1的X 行锁,但是被会话2的S锁阻塞。

触发死锁

ERROR 1213 (40001): Deadlock found when   trying to get lock; try restarting transaction

“mysql insert导致死锁的案例介绍”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: mysql insert导致死锁的案例介绍

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

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

猜你喜欢
  • mysql insert导致死锁的案例介绍
    本篇内容介绍了“mysql insert导致死锁的案例介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!两...
    99+
    2024-04-02
  • mysql死锁的介绍
    解决死锁的4种基本方法1、预防死锁:通过设置一些限制条件,去破坏产生死锁的必要条件2、避免死锁:在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁3、检测死锁:允许死锁的发生,但是通过...
    99+
    2024-04-02
  • C#多线程死锁介绍与案例代码
    一、死锁简介 在多道程序设计环境下,多个进程可能竞争一定数量的资源,。一个进程申请资源,如果资源不可用,那么进程进入等待状态。如果所申请的资源被其他等待进程占有,那么该等待的进程有可...
    99+
    2024-04-02
  • mysql死锁介绍以及解决
    什么是死锁 死锁是2+个线程在执行过程中, 因争夺资源而造成的相互等待的现象,若无外力作用,它们将无法推进下去。 死锁产生的4个必要条件 互斥条件 指进程对所分配的资源进行排他性使用,即一段时间内某资源只有一个进程占用,其他的进程请求资源只...
    99+
    2023-08-17
    mysql java 微服务
  • MySQL死锁的案例分享
    本篇内容介绍了“MySQL死锁的案例分享”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!两个死锁的小例子: ...
    99+
    2024-04-02
  • MySQL死锁的案例详解
    本篇内容介绍了“MySQL死锁的案例详解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • MySQL死锁案例分析
    最近项目中某个模块稳定复现MySQL死锁问题,本文记录死锁的发生原因以及解决办法。 1. 预备知识 1.1 表锁和行锁 表锁 表锁是MySQL中最基本的锁策略,并且是开销最小的策略。表锁会锁定整张数据表,用户的写操作(插入/删除/更新...
    99+
    2015-02-06
    MySQL死锁案例分析
  • 【MySQL】死锁案例之八
    一 前言 死锁其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发朋友都会在工作过程中遇见。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友...
    99+
    2024-04-02
  • 【MySQL】死锁案例之六
    一 前言 死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。 二 案...
    99+
    2024-04-02
  • 【MySQL】死锁案例之三
    一 前言       死锁,其实是一个很有意思,也很有挑战的技术问题,大概每个DBA和部分开发朋友都会在工作过程中遇见过。关于死锁我会持续写一个系列的案例分析,希望能...
    99+
    2024-04-02
  • 简单的通道并行示例,导致死锁
    大家好,我们又见面了啊~本文《简单的通道并行示例,导致死锁》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面...
    99+
    2024-04-04
  • 分析SIX锁和锁分区导致的死锁
    什么是SIX锁?官方文档锁模式中说到:意向排他共享 (SIX):保护针对层次结构中某些(而并非所有)低层资源请求或获取的共享锁以及针对某些(而并非所有)低层资源请求或获取的意向排他锁。 顶级资源允许使用并发...
    99+
    2024-04-02
  • 【Mysql】两条insert 语句产生的死锁
    背景:查看status日志发现两条insert 出现了死锁 RECORD LOCKS space id 388 page no 27032 n bits 616 index `idx_sv...
    99+
    2024-04-02
  • update.where无索引导致MySQL死锁问题解决
    目录引言死锁的日志分析日志复盘总结引言 随着我被拉入一个新的群聊“生产环境死锁问题排查解决”,打破了午后的悠然惬意,点开群聊秒送了一个648超级大礼包(业务不正常,死锁异常日志输出),领导怒斥并要...
    99+
    2024-04-02
  • INSERT语句引发的死锁实例分析
    这篇文章主要介绍“INSERT语句引发的死锁实例分析”,在日常操作中,相信很多人在INSERT语句引发的死锁实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”INSERT...
    99+
    2024-04-02
  • 多线程update导致的mysql死锁问题处理方法
    最近想起之前处理过的一个mysql 死锁问题,是在高并发下update批量更新导致的,这里探讨一下发生的原因,以及解决办法; 发生死锁的sql语句如下,其中where条件后的字段是有复合索引的。 update t_push_mes...
    99+
    2023-09-06
    数据库 java 开发语言 mysql死锁问题 mysql
  • mysql insert into ... select的死锁问题是什么
    小编给大家分享一下mysql insert into ... select的死锁问题是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!问题产生:系统中mysql里面有几个event...
    99+
    2024-04-02
  • 由FTWRL导致的MySQL从库死锁分析及参数深究
    最近线上执行备份的从库时出现复制卡死现象,分析以后发现是两个死锁,show full processlist的状态如图1所示,其中,数据库版本是官方5.7.18版本,我们内部做了些许修改,但与此次死锁无关。 ...
    99+
    2022-05-15
    MySQL MySQL
  • 剖析6个MySQL死锁案例的原因以及死锁预防策略
    ...
    99+
    2015-02-16
    剖析6个MySQL死锁案例的原因以及死锁预防策略
  • MySQL锁的用法介绍
    这篇文章主要讲解了“MySQL锁的用法介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL锁的用法介绍”吧!锁机制是数据库有别于文件系统的一个重要的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作