游戏攻略

异常问题排查与解决

栏目:游戏攻略 日期: 作者:游戏资讯

在软件开发过程中,出现异常问题是常见的。本文将围绕一次在开发环境中发生的异常问题进行分析,并提出解决方案。

问题描述

原因分析

  1. 在开发环境中,怀疑是提交事务时终止项目运行,没有提交该事务,造成了死锁。
  2. 调试该事务时时间过长,日志显示:“The client was disconnected by the server because of inactivity. See wait_timeout and interactive_timeout for configuring this behavior.”

问题排查

# 当前运行的所有事务
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. 发现事务id176602一直在运行状态。

  1. 锁的持有和请求情况。


  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@'%' ;

得到:
回滚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;

关键词:

相关资讯