MYSQL 真实高并发下的死锁

https://pan.baidu.com/s/1nM3VQdbkNZhnK-wWboEYxA?pwd=vwu6

下面是风控更新语句
 

------------------------
LATEST DETECTED DEADLOCK
------------------------
2023-08-04 01:00:10 140188779017984
*** (1) TRANSACTION:
TRANSACTION 895271870, ACTIVE 0 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 4 lock struct(s), heap size 1128, 2 row lock(s), undo log entries 1
MySQL thread id 1066127, OS thread handle 140189153339136, query id 470904886 172.16.51.14 sharkdb_app updating
//使用4个锁结构,占用1128字节,2个行锁,UNDO日志1个实例.

update risk_control_collect_summary
SET sum_success_order_number = sum_success_order_number + 1,
    sum_success_order_fee = sum_success_order_fee + 0.00,
    sum_success_order_amount = sum_success_order_amount + 10000.00,
    update_time = now(),    
    normal_amount_count = normal_amount_count + 1 
where merchant_no = '010449'
  and batch_date = '2023-08-04 00:00:00'

*** (1) HOLDS THE LOCK(S):
 //持有锁 3658表空间,第16页好,第112位,主键索引上,共享S REC记录锁
RECORD LOCKS space id 3658 page no 16 n bits 112 index PRIMARY of table `sharkdb`.`risk_control_collect_summary` trx id 895271870 lock mode S locks rec but not gap
Record lock, heap no 43 PHYSICAL RECORD: n_fields 24; compact format; info bits 0
//0 是主键ID,1是事务ID,2 是UNDO地址 3是字段
 0: len 6; hex 303130343439; asc 010449;;
 1: len 5; hex 99b0c80000; asc      ;;
 2: len 6; hex 0000355cc3bc; asc   5\  ;;
 3: len 7; hex 82000001400146; asc     @ F;;
 4: len 4; hex 35383135; asc 5815;;
 5: len 25; hex 50542e20476c6f62616c2047616d6520496e7465726e757361; asc PT. Global Game Internusa;;
 6: len 4; hex 80000000; asc     ;;
 7: len 14; hex 8000000000000000000000000000; asc               ;;
 8: len 14; hex 8000000000000000000000000000; asc               ;;
 9: len 9; hex 800000000000000000; asc          ;;
 10: len 9; hex 800000000000000000; asc          ;;
 11: len 9; hex 800000000000000000; asc          ;;
 12: len 4; hex 80000001; asc     ;;
 13: len 14; hex 8000000000000000000000000000; asc               ;;
 14: len 14; hex 800000000000000000000aae6000; asc             ` ;;
 15: len 9; hex 800000000000000000; asc          ;;
 16: len 9; hex 800000000000000000; asc          ;;
 17: len 9; hex 800000000000000000; asc          ;;
 18: len 5; hex 99b0c8000a; asc      ;;
 19: len 5; hex 99b0c8000a; asc      ;;
 20: len 4; hex 80000000; asc     ;;
 21: len 4; hex 80000000; asc     ;;
 22: len 4; hex 80000000; asc     ;;
 23: len 4; hex 80000001; asc     ;;

*** (1) WAITING FOR THIS LOCK TO BE GRANTED: //等待 主键索引 X REC锁
RECORD LOCKS space id 3658 page no 16 n bits 112 index PRIMARY of table `sharkdb`.`risk_control_collect_summary` trx id 895271870 lock_mode X locks rec but not gap waiting
Record lock, heap no 43 PHYSICAL RECORD: n_fields 24; compact format; info bits 0
 0: len 6; hex 303130343439; asc 010449;;
 1: len 5; hex 99b0c80000; asc      ;;
 2: len 6; hex 0000355cc3bc; asc   5\  ;;
 3: len 7; hex 82000001400146; asc     @ F;;
 4: len 4; hex 35383135; asc 5815;;
 5: len 25; hex 50542e20476c6f62616c2047616d6520496e7465726e757361; asc PT. Global Game Internusa;;
 6: len 4; hex 80000000; asc     ;;
 7: len 14; hex 8000000000000000000000000000; asc               ;;
 8: len 14; hex 8000000000000000000000000000; asc               ;;
 9: len 9; hex 800000000000000000; asc          ;;
 10: len 9; hex 800000000000000000; asc          ;;
 11: len 9; hex 800000000000000000; asc          ;;
 12: len 4; hex 80000001; asc     ;;
 13: len 14; hex 8000000000000000000000000000; asc               ;;
 14: len 14; hex 800000000000000000000aae6000; asc             ` ;;
 15: len 9; hex 800000000000000000; asc          ;;
 16: len 9; hex 800000000000000000; asc          ;;
 17: len 9; hex 800000000000000000; asc          ;;
 18: len 5; hex 99b0c8000a; asc      ;;
 19: len 5; hex 99b0c8000a; asc      ;;
 20: len 4; hex 80000000; asc     ;;
 21: len 4; hex 80000000; asc     ;;
 22: len 4; hex 80000000; asc     ;;
 23: len 4; hex 80000001; asc     ;;

*** (2) TRANSACTION:
TRANSACTION 895271869, ACTIVE 0 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 4 lock struct(s), heap size 1128, 2 row lock(s), undo log entries 1
MySQL thread id 1066512, OS thread handle 140188740466432, query id 470904887 172.16.51.14 sharkdb_app updating
update risk_control_collect_summary
SET sum_success_order_number = sum_success_order_number + 1,          
    sum_success_order_fee = sum_success_order_fee + 0.00,            
    sum_success_order_amount = sum_success_order_amount + 100000.00,      
    update_time = now(),                        
    normal_amount_count = normal_amount_count + 1 
where merchant_no = '010449'
  and batch_date = '2023-08-04 00:00:00'

*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 3658 page no 16 n bits 112 index PRIMARY of table `sharkdb`.`risk_control_collect_summary` trx id 895271869 lock mode S locks rec but not gap
Record lock, heap no 43 PHYSICAL RECORD: n_fields 24; compact format; info bits 0
 0: len 6; hex 303130343439; asc 010449;;
 1: len 5; hex 99b0c80000; asc      ;;
 2: len 6; hex 0000355cc3bc; asc   5\  ;;
 3: len 7; hex 82000001400146; asc     @ F;;
 4: len 4; hex 35383135; asc 5815;;
 5: len 25; hex 50542e20476c6f62616c2047616d6520496e7465726e757361; asc PT. Global Game Internusa;;
 6: len 4; hex 80000000; asc     ;;
 7: len 14; hex 8000000000000000000000000000; asc               ;;
 8: len 14; hex 8000000000000000000000000000; asc               ;;
 9: len 9; hex 800000000000000000; asc          ;;
 10: len 9; hex 800000000000000000; asc          ;;
 11: len 9; hex 800000000000000000; asc          ;;
 12: len 4; hex 80000001; asc     ;;
 13: len 14; hex 8000000000000000000000000000; asc               ;;
 14: len 14; hex 800000000000000000000aae6000; asc             ` ;;
 15: len 9; hex 800000000000000000; asc          ;;
 16: len 9; hex 800000000000000000; asc          ;;
 17: len 9; hex 800000000000000000; asc          ;;
 18: len 5; hex 99b0c8000a; asc      ;;
 19: len 5; hex 99b0c8000a; asc      ;;
 20: len 4; hex 80000000; asc     ;;
 21: len 4; hex 80000000; asc     ;;
 22: len 4; hex 80000000; asc     ;;
 23: len 4; hex 80000001; asc     ;;

*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 3658 page no 16 n bits 112 index PRIMARY of table `sharkdb`.`risk_control_collect_summary` trx id 895271869 lock_mode X locks rec but not gap waiting
Record lock, heap no 43 PHYSICAL RECORD: n_fields 24; compact format; info bits 0
 0: len 6; hex 303130343439; asc 010449;;
 1: len 5; hex 99b0c80000; asc      ;;
 2: len 6; hex 0000355cc3bc; asc   5\  ;;
 3: len 7; hex 82000001400146; asc     @ F;;
 4: len 4; hex 35383135; asc 5815;;
 5: len 25; hex 50542e20476c6f62616c2047616d6520496e7465726e757361; asc PT. Global Game Internusa;;
 6: len 4; hex 80000000; asc     ;;
 7: len 14; hex 8000000000000000000000000000; asc               ;;
 8: len 14; hex 8000000000000000000000000000; asc               ;;
 9: len 9; hex 800000000000000000; asc          ;;
 10: len 9; hex 800000000000000000; asc          ;;
 11: len 9; hex 800000000000000000; asc          ;;
 12: len 4; hex 80000001; asc     ;;
 13: len 14; hex 8000000000000000000000000000; asc               ;;
 14: len 14; hex 800000000000000000000aae6000; asc             ` ;;
 15: len 9; hex 800000000000000000; asc          ;;
 16: len 9; hex 800000000000000000; asc          ;;
 17: len 9; hex 800000000000000000; asc          ;;
 18: len 5; hex 99b0c8000a; asc      ;;
 19: len 5; hex 99b0c8000a; asc      ;;
 20: len 4; hex 80000000; asc     ;;
 21: len 4; hex 80000000; asc     ;;
 22: len 4; hex 80000000; asc     ;;
 23: len 4; hex 80000001; asc     ;;

*** WE ROLL BACK TRANSACTION (2)

发现事务1 和事务2 都是一样的SQL,而且更新的值也是一样的.与开发人员了解下,得知之所以相同,是该010499执行多笔一样的值更新.

高并发下 UPDATE  A SET MONEY=MONEY+1 WHERE ID=001; 如果该语句,主要是该ID是一样的,会导致相互死锁. 一条更新语句需要对主键同时上S + X 也就是共享+排他锁.

有时候搞不懂为啥对主键索引要加S,然后再加X. 多此一举啊?
还搞不懂得的是,为啥两个事务,加锁顺序为什么不一样, 应该按先加S,然后再加X. 难道加不了S,就加X,再等加S.这不就是故意埋坑吗? 
开发通过 REDIS分布式锁来解决.

虽然MYSQL 原理难以了解为啥.我加了丁奇大神的群细细学习里面的锁原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/908359.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CTFshow之信息收集第11关到20关。详细讲解

得而不惜就该 --小阁老 新篇章的接续! 一、实验准备 1、ctf网站:ctf.show 2、工具:chrome浏览器、hackbar插件 3、burpsuite抓包工具 二、实验技巧 (一)域名与子域名的dns解析记录 (二&#xff09…

【论文复现】语言模型中的多模态链式推理

📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐、摄影的一位博主。 📗本文收录于论文复现系列,大家有兴趣的可以看一看 📘相关专栏C语言初阶、C…

Docker:网络 Network

Docker:网络 Network Docker 网络架构CNMLibnetwork驱动网络类型 命令docker network lsdocker network inspectdocker network createdocker network connectdocker network disconnectdocker network prunedocker network rm 网络操作bridgehostcontainernone Doc…

局部敏感哈希(LSH)简介

0. Intro \textbf{0. Intro} 0. Intro 1️⃣ LSH \text{LSH} LSH的优势:在 λ \lambda{} λ较大的度量空间,也可以高效回答 c-ANN \text{c-ANN} c-ANN查询问题 2️⃣一些预备知识 多重集并集 (multi-set union): \text{(multi-set union): } (multi-set…

论文 | Evaluating the Robustness of Discrete Prompts

论文《Evaluating the Robustness of Discrete Prompts》深入探讨了离散提示(Discrete Prompts)的鲁棒性,即离散提示在自然语言处理任务中面对不同扰动时的表现。研究特别关注离散提示在自然语言推理(NLI)任务中的表现…

Linux 之 信号概念、进程、进程间通信、线程、线程同步

学习任务: 1、 信号:信号的分类、进程对信号的处理、向进程发送信号、信号掩码 2、 进程:进程与程序的概念、进程的内存布局、进程的虚拟地址空间、fork创建子进程、wait监视子进程 3、 学习进程间通信(管道和FIFO、信号、消息队列…

Vue:模板 MVVM

Vue:模板 & MVVM 模板插值语法指令语法 MVVMdefineProperty数据代理 模板 Vue实例绑定一个容器,想要向容器中填入动态的值,就需要使用模板语法。模板语法分为插值语法和指令语法。 插值语法 插值语法很简单,使用{{}}包含一…

C++中的继承——第二篇

一、继承与友元 友元关系不能够继承(就像父亲的朋友不一定是自己的朋友) 具体实现起来就是父类的友元可以访问父类的成员,但是不可以访问子类的成员 二、继承与静态成员 子类的静态成员变量本质上与父类的是同一份,存储在静态…

uni-app发起请求以及请求封装,上传及下载功能(六)

文章目录 一、发起网络请求1.使用及封装2. https 请求配置自签名证书3.拦截器 二、上传下载1.上传 uni.uploadFile(OBJECT)2. 下载 uni.downloadFile(OBJECT) 一、发起网络请求 uni-app中内置的uni.request()已经很强大了,简单且好用。为了让其更好用,同…

SLAM定位总结

文章目录 一、激光定位1.A-LOAM (2018)2.F-LOAM (2021)3.CT-ICP (2022)3.DLO:Fast Localization with Dense Point Clouds (2022)4.kiss-ICP :In Defense of Point-to-Point ICP Sim…

大端存储和小端存储

大端存储和小端存储 在计算机系统中,数据在内存中的存储方式并不是唯一的。对于多字节的数据类型(如 int、float 等),计算机可以以不同的方式在内存中存储它们。这些存储方式通常分为两种:大端存储(Big-En…

【数据结构二叉树】C非递归算法实现二叉树的先序、中序、后序遍历

引言: 遍历二叉树:指按某条搜索路径巡访二叉树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。 除了层次遍历外,二叉树有三个重要的遍历方法:先序遍历、中序遍历、后序遍历。 1、递归算法实现先序、中序、后…

【LeetCode】移除链表中等于设定值的元素、反转链表

主页:HABUO🍁主页:HABUO 🌜有时候世界虽然是假的,但并不缺少真心对待我们的人🌛 1. 移除链表中设定值的元素 题目:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所…

程序员日志之DNF手游1023版本活动补充

目录 传送门正文日志1、概要2、正文 传送门 SpringMVC的源码解析(精品) Spring6的源码解析(精品) SpringBoot3框架(精品) MyBatis框架(精品) MyBatis-Plus SpringDataJPA SpringClo…

macOS开发环境配置与应用开发教程

macOS开发环境配置与应用开发教程 引言 macOS是一个强大的操作系统,广泛应用于软件开发,尤其是iOS和macOS应用开发。本文将详细介绍如何配置macOS开发环境,并通过实例演示如何进行应用开发。希望通过这篇文章,帮助读者快速上手m…

提高交换网络可靠性之认识STP根桥与端口角色

转载请注明出处 该实验旨在学习如何选举根桥与识别端口角色。 1.三台交换机按要求连线,改名,分别为S1,S2,S3,以S1为例: 2.在S1上配置优先级为28672 同理,在交换机S2和S3上配置其优先级为32768&…

基于大数据的热门旅游景点数据分析系统的设计与实现

作者主页:编程千纸鹤 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参…

【大语言模型】ACL2024论文-03 MAGE: 现实环境下机器生成文本检测

【大语言模型】ACL2024论文-03 MAGE: 现实环境下机器生成文本检测 目录 文章目录 【大语言模型】ACL2024论文-03 MAGE: 现实环境下机器生成文本检测目录摘要研究背景问题与挑战如何解决核心创新点算法模型实验效果(包含重要数据与结论)主要参考工作后续优…

A012-基于Spring Boot的私房菜定制上门服务系统的设计与实现

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统私房菜定制上门服务系统信息管理难度大,容错率…

ios 快捷指令扩展(Intents Extension)简单使用 swift语言

本文介绍使用Xcode15 建立快捷指令的Extension,并描述如何修改快捷指令的IntentHandler,带参数跳转主应用;以及展示多个选项的快捷指令弹框(配置intentdefinition文件),点击选项带参数跳到主应用的方法 创建快捷指令 快捷指令是…