MYSQL INNODB死锁问题
大家好,今天碰到一个纯insert操作造成的死锁问题,网上查了一下,有人说是由于GAP LOCK,阅读了相关文档以后,还是不能完全理解为什么会产生死锁,希望哪位朋友能帮忙解释一下。
表结构如下:
mysql> show create table MySQLBug;
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| MySQLBug | CREATE TABLE `MySQLBug` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`value` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `Test_Index` (`value`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
开启两个不同的会话
session1
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into MySQLBug(value) values(34);
Query OK, 1 row affected (0.00 sec)
mysql> insert into MySQLBug(value) values(680);
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
mysql>
session2
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into MySQLBug(value) values(680);
Query OK, 1 row affected (0.00 sec)
mysql> insert into MySQLBug(value) values(565); --这句一执行session1就报死锁
搜到一篇文章是类似现象
http://bugs.mysql.com/bug.php?id=51140
在文章的最后面有人给出了一些解释,不过没看太明白,还望大家指点一二,谢谢!
表结构如下:
mysql> show create table MySQLBug;
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| MySQLBug | CREATE TABLE `MySQLBug` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`value` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `Test_Index` (`value`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
开启两个不同的会话
session1
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into MySQLBug(value) values(34);
Query OK, 1 row affected (0.00 sec)
mysql> insert into MySQLBug(value) values(680);
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
mysql>
session2
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into MySQLBug(value) values(680);
Query OK, 1 row affected (0.00 sec)
mysql> insert into MySQLBug(value) values(565); --这句一执行session1就报死锁
搜到一篇文章是类似现象
http://bugs.mysql.com/bug.php?id=51140
在文章的最后面有人给出了一些解释,不过没看太明白,还望大家指点一二,谢谢!
...全文
相关推荐
mysql innodb死锁问题详解.docx
通过这些方法,可以更有效地诊断和解决MySQL InnoDB中的死锁问题,优化系统的并发性能和稳定性。
一次mysql死锁的排查过程
本文基于一个真实的MySQL死锁案例,探讨了如何排查和理解死锁的原因,以帮助后端开发者更好地处理这类问题。
mysql死锁解决
然而,在并发操作环境下,多个事务可能会因为请求锁定相同的资源而相互等待对方释放锁,从而形成死锁情况。本文将详细介绍MySQL中的死锁现象、其产生的原因以及如何有效地检测与解决死锁问题。
详解MySQL(InnoDB)是如何处理死锁的
MySQL的InnoDB存储引擎在处理死锁问题上采用了一系列策略,确保数据库的正常运行和高并发性能。首先,我们需要理解什么是死锁。
MySQL Innodb表导致死锁日志情况分析与归纳
### MySQL Innodb表导致死锁日志情况分析与归纳#### 概述在数据库管理领域,特别是针对MySQL的InnoDB存储引擎,了解并解决死锁问题是至关重要的。


