mysql 制造一个死锁_一个 MySQL 死锁案例分析

对 MySQL 死锁不是特别擅长,业务中遭遇了,就尝试分析一下了。

业务需求,写出了类似这样的 SQL:

1

2INSERT INTO site(third_party_id, data) VALUES(%s, %s)

ON DUPLICATE KEY UPDATE data = %s

其中 site 表主键 id 自增,唯一索引 third_party_id。

SQL 目的很简单,就是从一张三方表中导数据到自己业务的一张表中间。

就这样简单的一句 SQL,没有复杂的事务,只是会出现大量的并发。

并发跑起来之后,很快就会发现程序报出大量死锁,看下死锁记录,可以抓到一条死锁信息大致如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24*** (1) TRANSACTION:

TRANSACTION 4185716323, ACTIVE 0.021 sec inserting

mysql tables in use 1, locked 1

LOCK WAIT 5 lock struct(s), heap size 1184, 3 row lock(s)

LOCK BLOCKING MySQL thread id: 2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值