记一次MySQL执行修改语句超时问题

mysql · 浏览次数 : 0

小编点评

**原因分析:** 1. **提交事务终止导致死锁:**提交事务后,如果数据库连接正常,服务器会为事务分配锁,等待事务完成。如果由于提交事务失败或网络问题导致服务器停止响应,事务会自动放弃锁,导致其他事务无法获取锁,从而进入死锁状态。 2. **wait_timeout和interactive_timeout设置影响锁释放时间:**`wait_timeout`和`interactive_timeout`参数控制了当服务器停止响应时锁的等待时间和交互式锁的等待时间。如果 `wait_timeout`或 `interactive_timeout`设置过低,可能会导致死锁发生。 3. **XA事务回滚操作可能导致死锁:**`XA`事务是一种分布式事务,在执行回滚操作时,需要协调所有参与事务的节点。如果节点间存在网络问题或故障,回滚操作可能会导致事务互相阻塞,从而导致死锁。 **问题排查:** 1. **检查服务器日志:**查看 `mysql` 日志,以了解最近发生死锁的详细信息,包括事务 ID、锁类型、持有者 ID、请求类型等。 2. **查看锁持有和请求情况:**使用 `SHOW INNODB_TRX`、`PERFORMANCE_SCHEMA.DATA_LOCKS` 和 `PERFORMANCE_SCHEMA.DATA_LOCK_WAITS` 等视图查询锁的持有和请求情况,以确定哪些事务正在阻塞其他事务。 3. **检查XA事务信息:**使用 `SHOW XA_RECOVER`等视图查询XA事务信息,以了解回滚操作的状态和结果。 4. **调试线程详情:**使用 `SHOW FULL PROCESSLIST`等视图查询当前线程详情,以查看每个事务的 ID、状态等信息。检查 `trx_mysql_thread_id` 是否为 0,因为可能表示事务被中断。

正文

异常问题

image.png

原因分析

  1. 这个问题发生在开发环境,怀疑是提交事务时终止项目运行,没有提交该事务,造成死锁
  2. 调试该事务时时间太长,为什么说有这个原因呢,因为通过查找日志显示

The client was disconnected by the server because of inactivity. See wait_timeout and interactive_timeout for configuring this behavior.

image.png

问题排查

# 当前运行的所有事务
select * from information_schema.innodb_trx;
# 查看锁的持有和请求情况 MySQL8.0
select * from performance_schema.data_locks;
# 查看锁的等待情况 MySQL8.0
select * from performance_schema.data_lock_waits;
# 当前线程详情
show full processlist;


  1. 1.发现事务id176602一直在运行状态

image.png

  1. 锁的持有和请求情况

image.png
image.png

  1. kill 掉事务关联的mysql线程ID (trx_mysql_thread_id)
KILL 362

trx_mysql_thread_id = 0 无法Kill 接着排查
确认 trx_mysql_thread_id = 0 为XA(分布式)事务

  1. 执行回滚操作
#查看XA事务信息
xa recover;
#执行报错可能没有权限
GRANT XA_RECOVER_ADMIN ON *.* TO root@'%' ;

得到
image.png
回滚XA事务操作

# XA事务回滚命令的格式:
xa rollback 'left(data,gtrid_length)','substr(data,gtrid_length+1,bqual_length)', formatID;
#示列
SELECT left('55f3cdd8-4f45-49c8-bbca-2738fa5a1514:35',38);
SELECT substr('55f3cdd8-4f45-49c8-bbca-2738fa5a1514:35',39,1);
xa rollback '55f3cdd8-4f45-49c8-bbca-2738fa5a1514:3', '5',1;

与记一次MySQL执行修改语句超时问题相似的内容:

记一次MySQL执行修改语句超时问题

异常问题 原因分析 这个问题发生在开发环境,怀疑是提交事务时终止项目运行,没有提交该事务,造成死锁 调试该事务时时间太长,为什么说有这个原因呢,因为通过查找日志显示 The client was disconnected by the server because of inactivity. Se

记一次字符串末尾空白丢失的排查 → MySQL 是会玩的!

开心一刻 今天答应准时回家和老婆一起吃晚饭,但临时有事加了会班,回家晚了点 回到家,本以为老婆会很生气,但老婆却立即从厨房端出了热着的饭菜 老婆:还没吃饭吧,去洗下,来吃饭吧 我洗好,坐下吃饭,内心感动十分;老婆坐旁边深情的看着我 老婆:你知道谁最爱你吗 我毫不犹豫道:你 老婆:谁最关心你? 我:你

记一次线上问题 → Deadlock 的分析与优化

开心一刻 今天女朋友很生气 女朋友:我发现你们男的,都挺单纯的 我:这话怎么说 女朋友:脑袋里就只想三件事,搞钱,跟谁喝点,还有这娘们真好看 我:你错了,其实我们男人吧,每天只合计一件事 女朋友:啥事呀? 我:这娘们真好看,得搞钱跟她喝点 问题复现 需求背景 MySQL8.0.30 ,隔离级别是默认

记一次 CDN 流量被盗刷经历

先说损失,被刷了 70 多RMB,还好止损相对即时了,亏得不算多,PCDN 真可恶啊。 600多G流量,100多万次请求。 怎么发现的 先是看到鱼皮大佬发了一篇推文突发,众多网站流量被盗刷!我特么也中招了。 抱着看热闹的心情点开阅读了。。。心想,看看自己的中招没,结果就真中招了 。 被盗刷资源分

记一次 .NET某上位视觉程序 离奇崩溃分析

一:背景 1. 讲故事 前段时间有位朋友找到我,说他们有一个崩溃的dump让我帮忙看下怎么回事,确实有太多的人在网上找各种故障分析最后联系到了我,还好我一直都是免费分析,不收取任何费用,造福社区。 话不多说,既然有 dump 来了,那就上 windbg 说话吧。 二:WinDbg 分析 1. 为什么

记一次 .NET某酒业业务系统 崩溃分析

一:背景 1. 讲故事 前些天有位朋友找到我,说他的程序每次关闭时就会自动崩溃,一直找不到原因让我帮忙看一下怎么回事,这位朋友应该是第二次找我了,分析了下 dump 还是挺经典的,拿出来给大家分享一下吧。 二:WinDbg 分析 1. 为什么会崩溃 找崩溃原因比较简单,用 !analyze -v 命

记一次aspnetcore发布部署流程初次使用k8s

主题: aspnetcorewebapi项目,提交到gitlab,通过jenkins(gitlab的ci/cd)编译、发布、推送到k8s。 关于gitlab、jenkins、k8s安装,都是使用docker启动服务。 首先新建一个项目,为了方便浏览就把swaggerr非开发环境不展示去掉 下面就是需

记一次 .NET某网络边缘计算系统 卡死分析

一:背景 1. 讲故事 早就听说过有什么 网络边缘计算,这次还真给遇到了,有点意思,问了下 chatgpt 这是干嘛的 ? 网络边缘计算是一种计算模型,它将计算能力和数据存储位置从传统的集中式数据中心向网络边缘的用户设备、传感器和其他物联网设备移动。这种模型的目的是在接近数据生成源头的地方提供更快速

记一次RocketMQ消费非顺序消息引起的线上事故

应用场景 C端用户提交工单、工单创建完成之后、会发布一条工单创建完成的消息事件(异步消息)、MQ消费者收到消息之后、会通知各处理器处理该消息、各处理器处理完后都会发布一条将该工单写入搜索引擎的消息、最终该工单出现在搜索引擎、被工单处理人检索和处理。 事故异常体现 1、异常体现 从工单的流转记录发现、

记一次难忘的json反序列化问题排查经历

前言 最近我在做知识星球中的商品秒杀系统,昨天遇到了一个诡异的json反序列化问题,感觉挺有意思的,现在拿出来跟大家一起分享一下,希望对你会有所帮助。 案发现场 我最近在做知识星球中的商品秒杀系统,写了一个filter,获取用户请求的header中获取JWT的token信息。 然后根据token信息