首页 > 其他分享 >两个死锁案例分析

两个死锁案例分析

时间:2024-02-20 23:11:51浏览次数:27  
标签:分析 sku RW thread lock 案例 死锁 OS id

背景 

死锁发生后,可以直接执行 show engine innodb status; 查看最近的死锁日志。

案例一:

索引唯一键冲突导致的死锁,解决办法,在进行事务操作前先对数据进行一个排序,降低互相锁冲突的概率。 

=====================================
2024-02-18 15:36:00 0x7f2146991700 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 21 seconds
-----------------
BACKGROUND THREAD
-----------------
srv_master_thread loops: 924090 srv_active, 0 srv_shutdown, 12634562 srv_idle
srv_master_thread log flush and writes: 13558652
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 690256
OS WAIT ARRAY INFO: signal count 2388066
RW-shared spins 0, rounds 2719233, OS waits 585806
RW-excl spins 0, rounds 7997290, OS waits 53784
RW-sx spins 48794, rounds 551200, OS waits 7420
Spin rounds per wait: 2719233.00 RW-shared, 7997290.00 RW-excl, 11.30 RW-sx
------------------------
LATEST DETECTED DEADLOCK
------------------------
2024-02-18 14:10:02 0x7f21443ab700
*** (1) TRANSACTION:
TRANSACTION 154050430, ACTIVE 0 sec inserting
mysql tables in use 1, locked 1
LOCK WAIT 4 lock struct(s), heap size 1136, 5 row lock(s), undo log entries 3
MySQL thread id 5647381, OS thread handle 139780884543232, query id 958859522 198.157.127.157 lingyi update
insert into sku_item_base(sku_id, item_code, sku_code, created_time, updated_time) values
         (  
            201106, '6056289', '130010733683', 1708236602319, 1708236602319
         ),( 
            201106, '631011000846', '130010733683', 1708236602319, 1708236602319
         ),( 
            201106, '631002000636', '130010733683', 1708236602319, 1708236602319
         ),( 
            201106, '631011001805', '130010733683', 1708236602319, 1708236602319
         ) 
        on duplicate key update
        sku_id = values(sku_id),
        item_code = values(item_code)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 366 page no 12 n bits 704 index uniq_inv of table `lingyejun`.`sku_item_base` trx id 154050430 lock_mode X waiting
*** (2) TRANSACTION:
TRANSACTION 154050431, ACTIVE 0 sec inserting, thread declared inside InnoDB 4997
mysql tables in use 1, locked 1
4 lock struct(s), heap size 1136, 3 row lock(s), undo log entries 2
MySQL thread id 5660394, OS thread handle 139780855346944, query id 958859523 198.157.127.157 lingyi update
insert into sku_item_base(sku_id, item_code, sku_code, created_time, updated_time) values
         (  
            201106, '631002000636', '130010733683', 1708236600557, 1708236600557
         ),( 
            201106, '6056289', '130010733683', 1708236600557, 1708236600557
         ),( 
            201106, '631011001805', '130010733683', 1708236600557, 1708236600557
         ),( 
            201106, '631011000846', '130010733683', 1708236600557, 1708236600557
         ) 
        on duplicate key update
        sku_id = values(sku_id),
        item_code = values(item_code)
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 366 page no 12 n bits 704 index uniq_inv of table `lingyejun`.`sku_item_base` trx id 154050431 lock_mode X
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 366 page no 12 n bits 704 index uniq_inv of table `lingyejun`.`sku_item_base` trx id 154050431 lock_mode X waiting
*** WE ROLL BACK TRANSACTION (2)
------------
TRANSACTIONS
------------

案例二

id not in导致间隙锁的范围太大,容易造成较大概率的锁冲突,改善方式,将更新变成预先查出要更新的id,直接按照id in的方式进行更新,即可避免此场景下的死锁。

=====================================
2024-02-20 08:54:36 0x7f91be3a3700 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 26 seconds
-----------------
BACKGROUND THREAD
-----------------
srv_master_thread loops: 26376784 srv_active, 0 srv_shutdown, 748203 srv_idle
srv_master_thread log flush and writes: 27124987
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 265694912
OS WAIT ARRAY INFO: signal count 814044187
RW-shared spins 0, rounds 792696423, OS waits 242496494
RW-excl spins 0, rounds 2512671900, OS waits 18197126
RW-sx spins 7800791, rounds 45286872, OS waits 452972
Spin rounds per wait: 792696423.00 RW-shared, 2512671900.00 RW-excl, 5.81 RW-sx
------------------------
LATEST DETECTED DEADLOCK
------------------------
2024-02-20 00:14:21 0x7f91be4ed700
*** (1) TRANSACTION:
TRANSACTION 1660683803, ACTIVE 0 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 22 lock struct(s), heap size 1136, 18 row lock(s), undo log entries 8
MySQL thread id 33018945, OS thread handle 140263655167744, query id 11765453967 198.157.127.157 lingyi updating
update lingye_imei
         SET sale_status =2,
            
                validate_desc ='sys activate',
            
            
                update_time =1708359261193,
            
            
                updated_by ='sys' 
         WHERE  id not in
                (
                    3149792
                )
            
            
                and imei in
                (
                    '741977070160711'
                )
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 922 page no 114075 n bits 120 index PRIMARY of table `lingyejun`.`lingye_imei` trx id 1660683803 lock_mode X locks rec but not gap waiting
*** (2) TRANSACTION:
TRANSACTION 1660683800, ACTIVE 0 sec starting index read, thread declared inside InnoDB 5000
mysql tables in use 1, locked 1
21 lock struct(s), heap size 1136, 16 row lock(s), undo log entries 8
MySQL thread id 33017059, OS thread handle 140263939823360, query id 11765453974 198.157.127.157 lingyi updating
update lingye_imei
         SET sale_status =2,
            
                validate_desc ='sys activate',
            
            
                update_time =1708359261195,
            
            
                updated_by ='sys' 
         WHERE  id not in
                (
                    3149780
                )
            
            
                and imei in
                (
                    '761939970161115'
                )
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 922 page no 114075 n bits 120 index PRIMARY of table `lingyejun`.`lingye_imei` trx id 1660683800 lock_mode X locks rec but not gap
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 922 page no 69029 n bits 624 index idx_imei of table `lingyejun`.`lingye_imei` trx id 1660683800 lock_mode X locks rec but not gap waiting
*** WE ROLL BACK TRANSACTION (2)
------------
TRANSACTIONS
------------

 

本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。

首发链接:https://www.cnblogs.com/lingyejun/p/18024223

标签:分析,sku,RW,thread,lock,案例,死锁,OS,id
From: https://www.cnblogs.com/lingyejun/p/18024223

相关文章

  • Vector和deque小案例
    打分案例1.目的:5个学生,10个评委,10个评委的分数去掉最高和最低分,取平均分就是学生的分数2.思路:​ 1.抽象学生​ 2.使用vector容器存储学生​ 3.把分数放入deque容器,然后对deque容器进行排序,之后删除首尾元素3.流程:​ 1.创建学生​ 2.评委给学生打分​ 3.根据学生的分数排......
  • 自顶向下语法分析
    目录自顶向下的语法分析FIRST集的计算过程FOLLOW集的计算过程应用自顶向下的语法分析自顶向下的语法分析是编译原理中的一个重要概念,它与自底向上的语法分析相对应。自顶向下的语法分析是从文法的开始符号出发,尝试为输入的符号串建立一棵分析树。这种分析方法通常采用递归下降......
  • 日志分析中的 awk、sort、uniq 和 grep 应用
    awk简介  awk是一种强大的文本处理工具,其功能与sed和grep相似,但更加灵活。它使用类似C语言的语法,并且适用于处理结构化文本数据,如表格数据。awk是一种模式扫描和处理语言,可以轻松提取、操作和格式化文本数据,特别是适用于处理日志文件中的结构化信息。sort简介  sort用于对......
  • 随笔 & 战略分析 II
    从现在起可谓是正式步入省选级别的训练,也算是一场好戏的开幕,整个OI的生涯已经正式启航。搞了几天,感觉目前的难度,考试冲正解完全冲不出来,代码的实现量也陡然增加,考完试后改题改的极其痛苦。考试策略表面看来,无论是在巴蜀训练做的套题还是在学校做的套题,都完全没有发挥到应该有......
  • 智能视频监控平台智能边缘分析一体机视频监控平台AI算法智能检测人员违规打电话
    在数字化时代的浪潮中,智能视频监控平台如同一双无所不见的眼睛,默默守护着我们的安全。而在这些平台中,智能边缘分析一体机以其独特的AI算法和智能检测功能,成为了维护规范和秩序的得力助手。今天,让我们一同探索这项技术如何在不断演进中,为我们的社会带来更加安全和高效的保障。......
  • 视频智能分析平台LntonAIServer视频监控管理平台车辆检测算法车辆识别
    在这个信息爆炸的时代,数据如同洪流般汹涌而来,而我们,正站在这股洪流的前沿,试图捕捉那些能够引领我们走向更加智能化未来的珍贵数据。在众多领域之中,视频监控管理平台的发展尤为迅猛,它们不仅仅是简单的录像工具,更是智能分析和管理的关键节点。而在这场智能化的革命中,LntonAIServer......
  • 连锁餐饮冷链物流配送系统优化研究分析
    一、引言现代餐饮业的迅速发展和消费者对食品安全与品质要求的日益提高,餐饮冷链配送作为保障食品安全和提升餐饮品质的关键环节,正受到越来越多的关注。本方案旨在通过深入分析餐饮冷链配送的需求和特点,结合先进的技术和管理手段,为餐饮企业提供一套高效、安全、可靠的冷链配送......
  • ARL分析与进阶使用
    在使用ARL(AssetReconnaissanceLighthouse资产侦察灯塔系统,项目地址地址为https://github.com/TophantTechnology/ARL)的时候,有两个问题比较困扰我:1.ARL使用Fofa导入数据的时候怎么降重?2.如何自己手动编写Poc?在网上查阅了一些相关资料后,我发现并没有有师傅写的很清晰,于是诞生......
  • 视频智能分析平台智能边缘分析一体机视频汇聚智能算法分析园区客流统计算法检测
    在城市的脉动中,园区作为经济活动的重要载体,扮演着举足轻重的角色。无论是科技园区、商务园区还是文化创意园区,它们都是城市发展活力的缩影。然而,随着竞争的加剧和需求的多样化,传统的园区管理方式已经难以满足现代园区的发展需求。这时,智能边缘分析一体机园区客流统计技术应运而生......
  • golang随机数源码分析及应用
    引言大家刚开始使用随机数的时候可能会这样写,但是他会产生一个问题,这是什么问题呢funcmain(){ fori:=0;i<10;i++{ rand.Seed(time.Now().Unix()) fmt.Println(rand.Intn(100)) }}发现打印出来的结果都是相同的让我们看看用代码分析为什么产生这个问题首......