seata at模式死锁

news2024/11/22 14:09:39

背景

mysql版本为5.7,在mysql的系统表中,有一个lock_deadlocks的指标

SELECT * FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE name LIKE '%deadlock%'

该指标的count值记录了数据库实例从启动到现在的死锁次数,我们通过普罗米修斯的mysql探针,采集了这个指标,制定了告警策略

https://github.com/prometheus/mysqld_exporter

线上收到死锁告警后, 发现是seata at模式所用的seata库发生的死锁,同时相应的业务系统出现阻塞卡顿情况

排查过程

先通过命令拿到死锁的信息, 拿到后恢复系统,然后慢慢查问题

show engine innodb status

拿到关键信息,日志比较长,贴一下关键点


*** (1) TRANSACTION:
delete from lock_table where xid = '172.16..:8091:440483815345885184' and branch_id in (440483816079888385,440483816235077633,440483816327356417,440483816373497857,440483816398655489,440483816746790913,440483817065558017)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 301 page no 6 n bits 144 index PRIMARY of table `seata`.`lock_table` trx id 338204135 lock_mode X waiting


*** (2) TRANSACTION:
insert into lock_table(xid, transaction_id, branch_id, resource_id, table_name, pk, row_key, gmt_create, gmt_modified) values ('172.16.22.13:8091:440483789588664320', 440483789588664320, 440483816818094081, 'jdbc:mysql://172.16..:3306/op', 't_order_agent_profit_explanation', '53641', 'jdbc:mysql://172.16..:3306/op^^^t_order_agent_profit_explanation^^^53641', now(), now())
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 301 page no 6 n bits 144 index PRIMARY of table `seata`.`lock_table` trx id 338204130 lock_mode X locks rec but not gap
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 301 page no 6 n bits 144 index PRIMARY of table `seata`.`lock_table` trx id 338204130 lock_mode X locks gap before rec insert intention waiting

我们来大概阅读一下这个死锁日志:

  1. 第一个事务执行一个delete语句,但是他在等待一个主键索引的写锁
  2. 第二个事务在执行insert语句,他现在持有一个写锁,但是在等待一个间隙锁的意向锁
    到这里大致猜测一下,可能是上面的delete语句会持有间隙锁,导致和insert语句的冲突,我们先看下这个语句持有锁的情况
begin;
delete from lock_table where xid = '172.16..:8091:440483815345885184' and branch_id in (440483816079888385,440483816235077633,440483816327356417,440483816373497857,440483816398655489,440483816746790913,440483817065558017);
SELECT * from `performance_schema`.data_locks;

在这里插入图片描述

这里有个关键点,supremum pseudo-record,这一行的意思就是对主键索引的最大索引值加锁,所以后续的insert都要等待这个锁,这里就产生竞争条件了,在并发的情况下就会出现死锁

解决

  1. 修改隔离级别为RC,不再添加间隙锁
  2. 升级seata版本,seata社区已经复现了这个bug,把数据库的链接修改为RC隔离级别了, 参照
https://github.com/seata/seata/pull/5638
``

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件外包开发的代码质量控制

软件代码质量控制是确保软件项目成功的重要组成部分。以下是一些常见的软件代码质量控制方法,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.代码审查(Code Review) 通过定…

Zynq UltraScale+ XCZU15EG 纯VHDL解码 IMX214 MIPI 视频,2路视频拼接输出,提供vivado工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优越性4、详细设计方案设计原理框图IMX214 摄像头及其配置D-PHY 模块CSI-2-RX 模块Bayer转RGB模块伽马矫正模块VDMA图像缓存Video Scaler 图像缓存DP 输出 5、vivado工程详解PL端FPGA硬件设计…

目前比较好用的护眼台灯?央视公认最好的护眼台灯推荐

写这篇文章的时候,我总有种悔不当初的痛感:上学时只喜欢造型好看的台灯,总是把老妈买的护眼灯丢在一边,导致现在眼睛高度近视。虽然不念书了,但平日使用电脑浏览信息、阅读纸质书仍是抛弃不掉的生活习惯,配…

Redis实现方式开启新篇章,解决分布式环境下的资源竞争问题,提升系统稳定性

前言 分布式锁一般有三种实现方式: 数据库乐观锁;基于Redis的分布式锁;基于ZooKeeper的分布式锁 本篇博客将介绍第二种方式,基于Redis实现分布式锁。 虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实…

万字长文搞懂产品模式和项目模式

项目模式是很多传统企业对IT进行投资的方式,相对于产品模式,项目模式在团队建设、快速反应等方面存在很多弊端,本文从多个角度比较了产品和项目两种团队模式的利弊,并在最后回答了若干常见问题。原文: Products Over Projects 软件…

活动回顾|KCD 2023 杭州站

KCD 2023 活动介绍 HANGZHOU 关于 KCD Kubernetes Community Days(KCD)由云原生计算基金会(CNCF)发起,由全球各国当地的 CNCF 大使、CNCF 员工以及 CNCF 会员单位联合组织。目前 KCD 正在全球各个国家活跃地组织进行中…

nvidia-smi

1、说明 nvidia-smi 是 NVIDIA System Management Interface 的缩写,是 NVIDIA 提供的一个命令行工具,用于查看和管理 NVIDIA GPU 设备的信息。执行这个命令通常可以获取关于系统上安装的 NVIDIA GPU 的实时状态和性能信息。 一般来说,nvid…

内裤洗衣机有用吗?公认好用的四大款内衣洗衣机推荐

内衣目前洗衣机已经成为我们生活中不可缺少的一种电器。这不但可以节约我们的时间,而且能更好地清洗干净贴身衣物,使我们的生活变得更健康。那么到底哪些内衣洗衣机值得买呢?哪些内衣洗衣机清洗效果会更干净呢?这次,我…

众和策略:谷歌大跌!土耳其股市,两度熔断!

当地时间周三,美股三大指数团体收跌,谷歌等大型科技股连累纳指大跌超2%,创2月以来最大单日跌幅。 当日,谷歌股价大跌近10%至三个月低位,市值一夜蒸发超1600亿美元。周二盘后,谷歌母公司Alphabet发布了最新…

FinalShell或者XShell工具 突然连不上服务器(绝对好使!)

关闭网络管理器 systemctl stop NetworkManager禁止网络管理器开机重启 systemctl disable NetworkManager重启网络 service network restart绝对好使!

技术实力获行业高度认可,几何伙伴首获科技进步奖殊荣!

2023年10月25日,“2023年度中国汽车工程学会科学技术奖”正式公布并于北京举行颁奖典礼,以对汽车工业努力奋斗、勇于创新的优秀企业和人才进行嘉奖,对优秀先进成果进行表彰。 其中,由几何伙伴主导,携手上汽集团、友道智…

睿趣科技:抖音小店在哪里选品

随着抖音平台的日益火爆,越来越多的商家选择在抖音小店开设自己的店铺。然而,对于许多新手来说,如何选品却成为了一个难题。那么,抖音小店应该在哪里选品呢? 首先,我们可以从抖音平台上的热门商品入手。通过观察抖音上…

创业酵母:为创业酵母的新增长,数字化“发酵”

成立于2014年11月的创业酵母是一家以教育和咨询为核心的一站式企业服务平台。 张丽俊(Cherry)和俞朝翎(俞头)是创业酵母的两位创始人,由于两位创始人都是第一代阿里人,他们希望能将自己在阿里沉淀下来的经验…

NPDP产品经理证书是什么行业的证书?

NPDP是一个跨行业的证书,它适用于各种不同类型和规模的组织。无论是制造业、服务业还是科技领域,都可以从NPDP认证中获益。 1. 制造业: 制造业涉及大量的产品开发和创新活动。从汽车制造到电子设备制造,从家居用品到航天航空&…

重复性管理--抽象的重要性(上)

Haskell 语言的设计者之一 Paul Hudak 曾说过一句略带夸张的话(overstatement): 编程中最重要的三件事是: 抽象, 抽象, 抽象. “abstraction, abstraction, abstraction” are the three most important things in programming. 如果你去问一些资深开发者, 程序员最重要的的能力…

电商API接口教程|设计一个牛逼的Java API接口?

主要从以上三个方面来设计一个安全的电商API接口(包含淘宝/天猫/京东/拼多多/抖音/跨境电商亚马逊/阿里巴巴/LAZADA等)。 一 安全性问题 安全性问题是一个接口必须要保证的规范。如果接口保证不了安全性,那么你的接口相当于直接暴露在公网环…

vue3+klinecharts实现k线(附完整代码)

vue3klinecharts实现k线 环境安装图表配置创建一个容器实现点击时间切换图表完整代码 环境 vue3 klinecharts 最终实现 安装 npm install klinecharts图表配置 具体可用参考官网 https://klinecharts.com/guide/styles.html const option {crosshair: {show: true,//…

操作系统进程调度算法的模拟实现(c语言版本)

前言:本文旨在分享如何使用c语言对操作系统中的部分进程调度算法进行模拟实现,以及算法描述的讲解,完整代码放在文章末尾,欢迎大家自行拷贝调用 目录 常见的调度算法 数据结构 先来先服务调度算法 算法模拟思路: …

LeetCode刷题---简单组(三)

文章目录 🍒题目一 20. 有效的括号🍒解法一🍒题目二 26. 删除有序数组中的重复项🍒解法一🍒题目三 21. 合并两个有序链表🍒解法一 🍒题目一 20. 有效的括号 给定一个只包括 ‘(’,‘…

Q-learning智能体

Q-learning智能体 Q-learning算法是一种无模型、在线、非策略的强化学习方法。Q-learning算法是一种基于价值的强化学习算法,它训练一个评价网络去估计回报或未来奖励。对于给定的观测值,智能体选择并输出估计收益最大的动作。 注:Q-learnin…