起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > 编程语言 > 【数据库培训】如果数据库死锁了 你认为问题在哪里

【数据库培训】如果数据库死锁了 你认为问题在哪里

时间:2019-06-19 10:53:00来源:编程网 作者:IT培训网 已有: 名学员访问该课程

  快捷搜索:数据库

前言:按道理,插入不冲突的记录,然后修改这条记录,行锁不应该冲突呀?唯一索引,主键索引怎么会有差异呢?是否有关?是死锁,还是其他原因?

一次诡异的数据库“死锁”,问题究竟在哪里?

程序死锁的问题,很难调试,看进程堆栈,看各个线程与锁的情况,对照代码进行排查。

数据库死锁的问题,更难,看不了数据库堆栈,也看不了数据库线程与锁,更难以对照代码排查。

【数据库培训】如果数据库死锁了 你认为问题在哪里_www.epx365.cn

前段时间,和一个朋友讨论了一个“疑似”数据库死锁的问题,最后进行试验与排查,找到了问题所在。

场景如下:

【数据库培训】如果数据库死锁了 你认为问题在哪里_www.epx365.cn

同一个表,高并发事务,事务内先插入一条记录,再更新这条记录:

如果更新的是唯一索引,有异常;

如果更新的是自增主键,就没有异常;

画外音:先不要被“dead lock”描述所迷惑,是死锁问题,阻塞问题,还是其他异常,还另说。

【数据库培训】如果数据库死锁了 你认为问题在哪里_www.epx365.cn

而且,据朋友所述,还能够复现:

开启事务;

插入记录;

sleep 5秒;

修改被插入的记录;

在并发时稳定复现。

根据朋友的描述,在线下开了多个MySQL客户端进行了并发模式测试,结果还挺出乎意料的。

第一步:数据准备

create table t ( id int(20) primary key AUTO_INCREMENT, cell varchar(20) unique )engine=innodb;

新建表:

存储引擎是innodb,MySQL版本是5.6;

id字段,自增主键;

cell字段,唯一索引;

start transaction; insert into t(cell) values(11111111111); insert into t(cell) values(22222222222); insert into t(cell) values(33333333333); commit;

插入一些测试数据。

第二步:session参数设置

事务的隔离级别,事务的自动提交等参数设置不当,都会对实验的结果产生影响,询问了朋友,事务的隔离级别是RR(repeatable read)。

set session autocommit=0; set session transaction isolation level repeatable read;

每一个session启动后:

关闭自动提交;

把事务隔离级别设为RR;

【数据库培训】如果数据库死锁了 你认为问题在哪里_www.epx365.cn

show session variables like "autocommit"; show session variables like "tx_isolation";

不放心的话,可以用上面两个语句查询确认。

第三步:多个终端session模拟并发事务

【数据库培训】如果数据库死锁了 你认为问题在哪里_www.epx365.cn

如上图,用SecureCRT开启两个窗口:

窗口A,先启动事务,并插入记录;

窗口B,再启动事务,也插入记录;

窗口A,修改插入的记录;

窗口B,也修改插入的记录;

奇怪的现象发生了,如果并发事务的update语句:

更新条件是cell,就会发生异常;

更新条件是id,就一切正常;

按道理,插入不冲突的记录,然后修改这条记录,行锁不应该冲突呀?唯一索引,主键索引怎么会有差异呢?是否有关?是死锁,还是其他原因?

大家帮忙分析分析,到底问题在哪里呢?

文章出自:http://qh.itpxw.cn/peixun/software/201948312.html

文章标题:【数据库培训】如果数据库死锁了 你认为问题在哪里



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

(责任编辑:IT培训网)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
培训学校
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员 用户级别:10 机构名称:IT培训网 联 系 人:罗老师 联系电话:13783581536 联系手机:13783581536 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件: 网站域名:http://www.itpxw.cn 注册时间:2016-07-18 11:07 最后登录:2024-02-20 13:02
推荐内容