暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
技术分享 _ 死锁分析案例 - 爱可生开源社区 - OSCHINA - 中文开源技术交流社区.pdf
53
7页
0次
2023-11-24
5墨值下载
技术分享 | 死锁分析案例 - 爱可生开源社区 - OSCHINA
作者:高鹏
文章末尾有他著作的《深入理解MySQL主从原理 32讲》,深入透彻理解MySQL主从,GTID相关技术知识。
一、问题由来
这是我同事问我的一个问题,在网上看到了如下案例,本案例RC RR都可以出现,其实这个死锁原因也比较简
单,我们来具体看看:
构造数据
CREATE database deadlock_test;
use deadlock_test;
CREATE TABLE `push_token` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`token` varchar(128) NOT NULL COMMENT 'push token',
`app_id` varchar(128) DEFAULT NULL COMMENT 'appid',
`deleted` tinyint(1) NOT NULL COMMENT '是否已删除 0:否 1:是',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_token_appid` (`token`,`app_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3384 DEFAULT CHARSET=utf8 COMMENT='pushtoken表';
insert into push_token (id, token, app_id, deleted) values(1,"token1",1,0);
操作数据
二、分析方法
我使用的分析方法是把整个加锁的日志打印出来,当然需要用到我自己做了输出修改的一个版
本,如下:
https://github.com/gaopengcarl/percona-server-locks-detail-5.7.22
这个版本我打开了的日志记录参数如下:
mysql> show variables like '%gaopeng%';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| gaopeng_mdl_detail | OFF |
| innodb_gaopeng_row_lock_detail | ON |
+--------------------------------+-------+
2 rows in set (0.01 sec)
这样大部分的Innodb加锁记录都会记录到errlog日志了。
好了下面我详细分析一下日志:
三、分析过程
初始化的情况整个表只有1条记录,本表包含一个主键和一个唯一键。
1. s1(TRX_ID367661)执行语句
begin;
UPDATE push_token SET deleted = 1 WHERE token = 'token1' AND app_id = '1';
日志输出:
2019-08-18T19:10:05.117317+08:00 6 [Note] InnoDB: TRX ID:(367661)
table:deadlock_test/push_token index:uk_token_appid space_id: 449 page_id:4 heap_no:2 row lock
mode:LOCK_X|LOCK_NOT_GAP|
PHYSICAL RECORD: n_fields 3; compact format; info bits 0
0: len 6; hex 746f6b656e31; asc token1;;
1: len 1; hex 31; asc 1;;
2: len 8; hex 8000000000000001; asc ;;
2019-08-18T19:10:05.117714+08:00 6 [Note] InnoDB: TRX ID:(367661)
table:deadlock_test/push_token index:PRIMARY space_id: 449 page_id:3 heap_no:2 row lock
mode:LOCK_X|LOCK_NOT_GAP|
PHYSICAL RECORD: n_fields 6; compact format; info bits 0
0: len 8; hex 8000000000000001; asc ;;
1: len 6; hex 000000059c2c; asc ,;;
2: len 7; hex bf000000420110; asc B ;;
3: len 6; hex 746f6b656e31; asc token1;;
4: len 1; hex 31; asc 1;;
5: len 1; hex 80; asc ;;
我们看到主键和唯一键都加锁了,模式为LOCKX|LOCKNOT_GAP|如下图:
of 7
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜