mysql5.7执行SQL死锁问题的定位方法

在统信UOS ARM电脑上,用Qt Creator和linuxdeployqt打包Qt程序(保姆级避坑指南) 本文详细介绍了在统信UOS ARM架构下使用Qt Creator和linuxdeployqt打包Qt程序的完整流程,包括环境配置、工具链编译、依赖管理和DEB包生成等关键步骤,帮助开发者高效解决国产操作系统下的应用部署难题。 阅读详情

1、先登陆数据库mysql -uroot -p,然后使用命令:show engine innodb status;
    在命令的输出结果中,找到“LATEST DETECTED DEADLOCK”。
    从这段内容中在找到产生死锁的SQL语句(比如:replace into 和delete语句),以及产生死锁时直接原因,以及哪一个事务被回滚了。

2、手动复现死锁的场景:(记得将操作该表的程序都停掉,只有手动执行SQL)
    (1)打开3个MYSQL登陆shell界面,并且登陆。mysql -uroot -p
    (2)在2个shell界面中,分别设置为手动提交:set autocommit=0;
    (3)在2个shell界面,按出现死锁场景的语句执行顺序,手动在2个shell界面上执行SQL语句。
    (4)在第3个shell界面中,使用命令:select * from information_schema.innodb_locks;  可查看到当前锁等待的信息。

3、查看锁等待的信息,分析定位出死锁产生原因。解决死锁的方法有:
    (1)replace into冲突时:并行操作数据库,修改为串行操作数据库。
    (2)repalce into+delete死锁时:调整事务中的SQL语句执行顺序,把delete放前面。确保第1个SQL语句申请到更多的锁,避免第1个SQL语句申请少量锁,第2个SQL语句申请更多锁。
     

(mysql5.7)
查询隔离级别:
select @@tx_isolation;

自动提交关闭:mysql> set autocommit=0;

查询自动提交:mysql> select @@autocommit;

锁等待信息查询命令:
select * from information_schema.innodb_locks;

死锁产生的4个必要条件,参考文档:https://blog.csdn.net/guaiguaihenguai/article/details/80303835
 

MySQL死锁(Deadlock found when trying to get lock; try restarting transaction) 前言:最近一个SpringBoot项目在一段时间内出现了大量的死锁,花了些时间,最总解决了问题,在此记录一下。 写在前面:本次问题的核心是在事务检索和操作时没有使用索引,数据库使用了表锁,导致操作时间过长,从而使锁占用时间过长,最终导致死锁。 环境: 数据库MySQL 5.7 存储引擎:InnoDB (1).定位问题 进入数据库命令行,执行以下指令,查看最近一次死锁的信息: show engine innodb status; MySQL默认只能看到最近一次的死锁,如果想要把死锁信息保存到MySQL 阅读详情

相关推荐

MySQL数据库死锁全解析:发生场景、定位方法、解决方案及最佳实践

MySQL死锁分析与解决方案摘要 MySQL死锁数据库开发中的常见问题,主要发生在交叉锁、并发插入、事务嵌套、长事务和间隙锁等场景(5.5+版本)。定位方法包括查看死锁日志(SHOW ENGINE INNODB STATUS)、查询系统表(5.7+)、开启详细日志记录(5.6+)及使用第三方工具。 解决方案涵盖: 优化事务设计(缩短事务、固定SQL顺序) 调整锁粒度(行锁替代表锁) 降低隔离级别(使用READ COMMITTED) 实现重试机制(指数退避策略) 其他优化(意向锁、乐观锁等8.0+特性) 最

专注于 Java 后端架构、微服务、分布式、前端及 AI 领域的技术分享,是开发者获取硬核知识、交流实战经验的专业博客。 1907

SqlServer数据库常用死锁问题定位语句

SqlServer数据库常用死锁问题定位语句

weixin_43968026的博客 1592

MySQL 故障诊断:MySQL 占用 CPU 过高问题定位及优化

数据库

theoderic001的博客 4073

MySQL数据库死锁问题排查定位

探讨了死锁产生的条件,如何排查数据库死锁,以及应对死锁的办法。

Transient_的博客 2778

MySQL insert 死锁问题记录

MySQL insert死锁原因探究分析

jhgdike的专栏 3115

mysql 死锁情况

共享锁:也就是读锁。 可以支持多个用户同时读。 排他锁:也就是写锁。 一、 一个用户A操作表A,又访问表B。 另一个用户B操作表B,又访问表A。就有可能用户A等待表B锁的释放,用户B等待表A的释放。两者都在等待对方,导致了死锁。 解决方法:调整逻辑访问顺序一致。 二、 用户A查询一条记录,然后修改该记录。用户B也查询该记录,然后也企图修改该记录。锁从读锁升级为写锁。 A在等待B的读锁释放。 B在等...

磨刀不误砍柴工 407

MySQL死锁问题定位与解决方案

mysql死锁问题

qq_46301912的博客 1290

Mysql死锁问题定位及解决。

本文中,MySQL5.7版本,InnoDb引擎。 通过日志监控发现,线上环境发生死锁,show innodb status 日志内容如(只截取了一小段日志): 2020/4/22 1:29,InnoDB: *** WE ROLL BACK TRANSACTION (1) 2020/4/22 1:29,InnoDB: 2020/4/22 1:29,InnoDB: *** (1) WAITIN...

Chou_Yuan的博客 654

Mysql insert on duplicate key 死锁问题定位与解决

最近在监测线上日志时发现我们一个Mysql业务db时常出现deadlock,频次不高但却一直出现,定位后发现是在并发场景下的sql出现的死锁。经过分析发现这种sql确实比较容易造成死锁,不太适用于我们目前的业务场景,于是更换后解决问题。这篇文章就从分析死锁展开,到最终如何解决这样的问题分享相应的思路。...

m0_61083409的博客 2273

怎么避免mysql死锁问题以及解决死锁

什么是死锁 问题现象(锁超时会回滚) InnoDB 锁类型 间隙锁( gap lock ) next-key lock (临键锁) 意向锁( Intention lock ) 插入意向锁( Insert Intention lock ) 锁模式兼容矩阵 阅读死锁日志 经典案例分析 案例一:事务并发 insert 唯一键冲突 案例一:先 update 再 insert 的并发死锁问题 如何尽可能避免死锁 解决方法 粗暴方式 文雅方式 对于锁的建议 如何定位死锁成因

1242

mysql死锁问题定位和解决

1、背景 不知道怎么回事我重复操作一张表,感觉像死锁,但是查询死锁表却没有数据,在这张表执行任何SQL语句都没有用。 2、分析 可能是死锁 怎么查询是否死锁 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 怎么查询是否等待 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 怎么查询当前是否执行中的事务 SELECT * FROM INFORMATION_SCHEMA

往前的娘娘 571

数据库死锁问题排查

又因为在一种特殊情况下,会有同一个用户的两个fund_transfer_order_no的前20位相同,这就导致两条不同的记录的索引值一样(因为seller_id 和fund_transfer_order_no(20)都相同 )。以上两个索引,其实idx_seller_transNo已经覆盖到了idx_seller,由于历史原因,因为该表以seller_id分表,所以是先有的idx_seller,后有的idx_seller_transNo。GAP锁的目的,是为了防止同一事务的两次当前读,出现幻读的情况。

victo_chao的博客 745

数据库死锁全解析:通过SQL语句定位与解决方案

在高并发的数据库系统中,死锁是一种常见的性能问题。当两个或多个事务在执行过程中相互等待对方释放资源时,就会发生死锁现象。这种情况通常导致数据库的性能严重下降,甚至引发服务不可用。本文将深入分析数据库死锁的成因,并通过 SQL 语句帮助开发者定位死锁的根本原因,同时提供几种常见的解决方案,帮助你在数据库开发和维护中高效地应对死锁问题死锁是指两个或多个事务在执行过程中,因争夺资源而形成一种相互等待的局面,从而导致程序无法继续执行下去。通常,死锁发生在多个事务同时操作多个资源时,事务之间形成了环形等待。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 631

MySQL死锁原因及解决方法

MySQL 死锁(Deadlock)是指两个或多个事务在执行过程中,因争夺资源而陷入相互等待的状态,导致事务无法继续执行的现象。当死锁发生时,MySQL 会自动检测并选择一个事务作为“牺牲者”(通常是较小的事务)进行回滚,另一个事务则继续执行。通过统一资源访问顺序、优化索引、拆分事务等方法,可以有效减少死锁发生。下面通过一个具体的例子说明 MySQL 死锁的产生和解决方法。假设有两个事务(事务A和事务B),操作两张表。所有事务按固定顺序操作表或行。

走过冬季 1630

MYSQL的REPLACE INTO导致死锁问题

并发replace into导致MySQL死锁 发表于 2017-08-06 | 分类于 MySQL | 之前曾解决过Spark任务的不同Executor同时更新MySQL导致死锁问题,最近该同事遇到了这个问题的升级版:业务有两个不同的数据源分别用于实时计算和更新MySQL同一张表的不同列,目前这个是分别启动了两个Spark Streaming任务,但是更新MySQL不时 出现死锁问题,只能...

weixin_43277501的博客 7700

数据库死锁问题的排查与解决

数据库死锁是一种特殊的并发问题,指两个或多个事务在并发操作时,因相互等待对方释放资源(如锁)而无法继续进行,导致这组事务永远处于等待状态。死锁可能会导致数据库中的事务超时,无法完成。

lssffy的博客 7838

MySQL如何输出发生死锁SQL到日志文件

MySQL死锁定位具体的SQL

qq_34798605的博客 1552
上一篇: C++ STL的算法总结
下一篇: linux发行版的ISO下载
步惊云126
博客等级 码龄18年 12粉丝 · 17原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值