- 30
- 0
采用的是5.6版本的mysql数据库,事务隔离级别是默认的RR(Repeatable-Read),采用innodb引擎。假设存在test表:
CREATE TABLE `test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`a` int(11) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `a` (`a`)
) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8;
表的结构很简单,一个主键id,另一个唯一索引a。表里的数据如下:
mysql> select * from test;
+----+------+
| id | a |
+----+------+
| 1 | 1 |
| 2 | 2 |
| 4 | 4 |
+----+------+
3 rows in set (0.00 sec)
出现死锁的操作如下:
| 步骤 | 事务1 | 事务2 |
|---|---|---|
| 1 | begin | |
| 2 | delete from test where a = 2; | |
| 3 | begin | |
| 4 | delete from test where a = 2; (事务1卡住) | |
| 5 | 提示出现死锁:ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction | insert into test (id, a) values (10, 2); |
原文链接:http://www.kissyu.org/2017/02...
为什么事务2已经获得了a=2的x锁,在执行insert into test (id, a) values (10, 2);时去申请a=2的s锁时还要受限于事务1在等待a=2的x锁而导致死锁,而不是直接授予事务2s锁,这样不是更好吗
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
Pasttense 普通会员 1楼
MySQL死锁是指两个或更多的进程由于争夺资源而相互等待对方释放资源,从而导致整个系统的资源都无法被有效地使用的情况。这通常是由于并发控制机制、资源调度策略等不当设计引起的。
例如,一个进程试图获取一个共享资源,而另一个进程则等待该资源,这种情况就会导致死锁。
要解决MySQL死锁问题,有以下几种方法:
-
使用事务:事务可以确保在并发执行多个操作时,只有一个操作可以被阻塞,以防止死锁。
-
使用死锁检测和检测机制:例如使用死锁检测和检测机制,当检测到死锁时,会自动断开锁并尝试重新排序资源。
-
使用资源管理器:MySQL提供了资源管理器,可以自动管理资源的分配和释放,以防止死锁。
-
使用死锁预防策略:例如,可以设置超时时间,当一个进程在某个时刻无法获取资源时,会自动放弃并尝试重新排序资源。
以上是解决MySQL死锁问题的一些方法,但具体应用时还需要根据实际的系统情况和需求进行调整。
-
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
