首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

死锁分析

最近新项目上线,在压测和发布生产都出现了好几种死锁情况,分析一二 死锁日志 日志一: ? 日志二: ? 日志三: ?...但在程序处理时这条SQL的where条件一样而已 分析 隔离级别RC 日志一,where里面的条件不同 第一个事务在等待RECORD LOCKS,锁模式为X model;位置在space id 428...索引上看使用idx_tenant_user,也与死锁日志一致,但怎么就死锁了呢?...原来线上使用的index merge 有官网上有介绍:https://dev.mysql.com/doc/refman/5.6/en/index-merge-optimization.html MySQL在分析执行计划时发现走单个索引的过滤效果都不是很好...解决 建立联合索引 都使用主键更新 关掉参数index_merge_intersection=off,禁用index_merge功能 参照 MySQL 优化之 index_merge 一个 MySQL 死锁案例分析

61430

死锁分析延续

根据上一篇【死锁分析】,又重新梳理了一下,画图表示更形象一些 【使用电脑阅读更佳】 事务 1 事务 2 - begin begin delete id=1;(1)id加锁、(2)A加锁 delete id...;如果先走(tenantid,userid) 则是日志一 先走no,则是日志二 索引交叉,则是日志三 最近借着死锁事项,又温习了部分数据库的理论知识,后面有时间再整理。...现在的程序员真难,得上知天文,下知地理;这应该是DBA的专长,作为开发也得去深究,真难 在追查死锁的过程中,对照理论有一些实践,总结一下: 查看事务自动提交选项 show session variables...gap 其实不仅会在主键加X,还会在二级索引上也加X,但没有显示出来;这儿跟delete一样,其实也是个隐式锁 模拟测试了一下,两条sql,一条根据二级索引删除操作、另一条使用主键更新记录模拟并发死锁

35830
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL死锁分析

    这里就介绍一下对MySQL死锁的理解,并提出一个基于审计日志分析死锁的方法。 一、死锁场景 我们创建一个最简单的死锁场景 1....所以存在死锁。 在MySQL中,当开启死锁检测时,即innodb_deadlock_detect设置为ON时,每个事务请求锁并发生锁等待的时候,都会进行死锁检测。...四、如何分析死锁 通常的分析,都是看死锁日志,在结合业务执行的逻辑进行分析。如果只是上文中的简单case,还是比较容易的。...但复杂的,多个事务相互依赖的情况,通过死锁日志提供的信息,再加上当时分析业务逻辑,可能也不是很容易。 五、通过审计日志分析死锁 分析死锁的根本目标,是找到业务如何执行SQL,构成死锁的。...通过分析innodb_lock_waits+innodb_trx中的信息,可以得到造成死锁的SQL信息。 另外一种是解析法。

    1.5K50

    【MySQL】mysql死锁以及死锁日志分析

    1.死锁的概念 死锁死锁一般是事务相互等待对方资源,最后形成环路造成的。 对于死锁,数据库处理方法:牺牲一个连接,保证另外一个连接成功执行。...发生死锁会返回ERROR:1213 错误提示,大部分的死锁InnoDB存储引擎本身可以侦测到,不需要人为进行干预。...18514656666' where mobile='18514656620'; 空 5 空 delete from info_area where id=1; image.png image.png 分析死锁日志...uid='bbb';等待 空 4 ERROR 1213 (40001) insert INTO users VALUES(2,'bbb'); 成功 image.png image.png 分析死锁日志...通过阅读死锁日志,我们可以清楚地知道两个事务形成了怎样的循环等待,再加以分析,就可以逆向推断出循环等待的成因,也就是死锁形成的原因。

    3.7K41

    PostgreSQL 死锁分析

    任何数据库都有死锁,MYSQL的死锁有相关的工具,或者去日志查找,postgresql的死锁又怎么搞,今天的来说说。...这三个里面的设置,死锁的检测一定是要设置的,因为死锁被发现时,最好是尽快的通过系统检测到后,尽快的解除(牺牲一个)。保证系统正常的运行,尤其在OLTP的系统中。...OK 我们先来看一下什么是死锁,这里我们稍微的把死锁的鉴定的时间调大一点,好来给执行发现死锁的语句一点时间,我们将deadlock_timeout 设置为 20秒,当然如果是生产系统,你这样做,呵呵 你还想干吗...系统会给出死锁的信息以及相关解决的信息,当然如果在死锁期间,通过语句你也是可以发现相关的死锁信息的。 ?...说完简单的分析,还的找一期来说说,怎么避免死锁

    3.6K10

    GreatSQL 死锁案例分析

    1.背景概述 客户业务发生死锁的报错,根据业务程序日志及业务流程,发现造成死锁的原因是:事务1 delete + insert ,事务2 delete + insert 2个事务交替执行导致的死锁;由于...GAP锁阻塞了插入意向锁,并且当delete的数据存在时死锁不会发生,当delete的数据不存在时,会发生死锁。...9 | +------+------+------+------+ 4 rows in set (0.01 sec) 2.2 事务执行顺序 按以下事务执行顺序,如果要删除的数据存在,则不会发生死锁...;如果要删除的数据不存,并且要删除的数据在同一个GAP锁的区间内则会发生死锁; 时间事务1事务2T1BEGIN;BEGIN;T2delete from test where c1=?...3.总结 此次死锁的发生主要是GAP 锁 和 插入意向锁的冲突,建议让业务修改一下逻辑,先判断数据是否存在 select 一下,存在的话 delete 后在 insert ; 不存在的话直接 insert

    5700

    MySQL死锁案例分析

    本文针对上一篇《MySQL优化案例分享》文章中提到的线上业务产生的一个死锁问题进行展开讨论,主要针对两个update操作导致的死锁的场景,借此机会正好总结下MySQL锁及分析下产生死锁的原因和解决方案;...案例分析 MySQL版本:MySQL 5.7 隔离级别:RC Session1 Session2 T1 begin;select * from locktest where name=’test’ lock...,回滚] 死锁日志: ------------------------ LATEST DETECTED DEADLOCK ------------------------ 2021-04-30 17:...那么我们通过对上述操作,结合死锁日志进行分析: Session1的lock in share mode获取到S锁(lock mode S locks rec but not gap),Session1的...在该场景下,将update操作改为delete会得到同样的效果,同样也会产生死锁; 那么为什么会出现死锁呢?

    2.3K20

    故障分析 | MySQL死锁案例分析

    ---一 背景死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见 。本次分享的一个死锁案例是 涉及通过辅助索引的更新以及通过主键删除导致的死锁。...希望能够对想了解死锁的朋友有所帮助。二 案例分析2.1 业务逻辑select for update 表记录并加上 x 锁,查询数据,做业务逻辑处理,然后删除该记录。...heap no 8 PHYSICAL RECORD: n_fields 2; compact format; info bits 0*** WE ROLL BACK TRANSACTION (2)2.5 死锁分析...三 小结敲黑板 ,重点: 死锁是因为不同事务对表记录加锁的顺序不一致导致相互等待对方持有的锁导致的。大家在分析死锁的时候能基于该原则去分析理清业务的sql 逻辑,基本上都能解决大部分的问题场景。...另外文章的最后我们再次复习一下 MySQL 的加几个基本原则,方便大家后面遇到死锁案例进行分析:原则 1:加锁的基本单位是 next-key lock。原则 2:查找过程中访问到的对象才会加锁。

    86430

    故障分析 | MySQL死锁案例分析

    本次分享的死锁案例是 更新不存在的记录加上 X GAP lock 和 insert 的意向锁冲突。希望能够对想了解死锁的朋友有所帮助。...二 案例分析2.1 业务逻辑业务逻辑: 业务需要并发不同数据(insert+update),首先是更新记录,如果发现更新的 affect rows 为0,然后就执行插入,如果插入失败,再执行更新。...heap no 4 PHYSICAL RECORD: n_fields 2; compact format; info bits 0*** WE ROLL BACK TRANSACTION (2)2.5 死锁分析...小结敲黑板 ,重点: 死锁是因为不同事务对表记录加锁的顺序不一致导致相互等待对方持有的锁导致的。大家在分析死锁的时候能基于该原则去分析理清业务的sql 逻辑和执行顺序,基本上都能解决大部分的问题场景。...另外文章的最后我们再次复习一下 MySQL 的加几个基本原则,方便大家后面遇到死锁案例进行分析:原则 1:加锁的基本单位是 next-key lock。原则 2:查找过程中访问到的对象才会加锁。

    78240

    Oracle死锁案例分析

    等待链 A被C堵塞,C被B堵塞,B被A堵塞 等待链分析: A执行到语句3了,说明主键为orderno_a的order数据行锁和ch1的channel数据行锁已经获取到了,而其余的B和C只能等待该ch1...死锁分析分析这个死锁就要明白等待事件enq: TX - allocate ITL entry所代表的资源itl事务槽的含义。itl事务槽是数据块头中用来标记事务的记录。在这里有个重点是 数据块 。...这就是这个死锁的关键点。当然不同表的事务肯定跨数据块了,一个事务即使修改一个表的多条数据也可能跨块了。...完成了锁的闭环 到此死锁分析完毕。...将会发生行迁移 update t_order set mesg=(select rpad('b',3000,'b') from dual) where mesg like 'b%'; --可以使用以下语句分析行迁移的表

    68210

    SQL Server死锁报错分析

    概述 最近遇到一个生产环境的问题,报错如下: 事务(进程 ID 89)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。...分析了下代码,主要的部分是包裹在事务中,且给主要的数据更新加了数据库资源锁。...报错时有抓到报错的语句,分析了下,是更新某张表的字段时,报错的。一开始一直在分析代码层面,但是始终没思路。后台和同事分析了下报错的SQL语句。...一旦更新时间长,且SQL阻塞了,就会有死锁的问题。 解决 既然是SQL更新问题,那么第一查看的应该是索引。...如果遇到死锁的问题,分析了代码,的确没问题。可以考虑导致死锁的语句会不会有性能问题,从索引着手。

    59110

    数据库死锁怎么分析

    创建死锁情景 我们先创建一个发生死锁的情景,在Session A和Session B中分别执行两个事务,具体情况如下: 我们分析一下: 从第③步中可以看出,Session A中的事务先对hero表聚簇索引的...lock; try restarting transaction 以上是我们从语句加了什么锁的角度出发来进行死锁情况分析的,但是实际应用中我们可能压根儿不知道到底是哪几条语句产生了死锁,我们需要根据MySQL...,所以就把以LATEST DETECTED DEADLOCK这一部分给单独提出来分析一下。...思索分析的思路 查看死锁日志时,首先看一下发生死锁的事务等待获取锁的语句都是啥。...找到发生死锁的事务中所有的语句之后,对照着事务获取到的锁和正在等待的锁的信息来分析死锁发生过程。

    75330

    MySQL批量更新死锁案例分析

    问题描述 在做项目的过程中,由于写SQL太过随意,一不小心就抛了一个死锁异常,如下: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException...原因分析 mysql的事务支持与存储引擎有关,MyISAM不支持事务,INNODB支持事务,更新时采用的是行级锁。这里采用的是INNODB做存储引擎,意味着会将update语句做为一个事务来处理。...蛋疼的情况出现了,一条语句获取了idx_1上的锁,等待主键索引上的锁;另一条语句获取了主键上的锁,等待idx_1上的锁,这样就出现了死锁。...status.setRollbackOnly();          return e;       }    } }); 小结:在采用INNODB的MySQL中,更新操作默认会加行级锁,行级锁是基于索引的,在分析死锁之前需要查询一下...在并发度高的应用中,批量更新一定要带上记录的主键,优先获取主键上的锁,这样可以减少死锁的发生。

    2.2K40

    ​insert on duplicate key死锁问题分析

    // insert on duplicate key死锁问题分析 // 开始今天的文章之前,先说明下昨天文章中的一个错误,昨天文章最后说replace into带来的死锁问题可以使用insert...into duplicate key update的方法来解决,今天实际测试的时候,还是遇到了一些问题,改方法并没有完全解决死锁的问题,来看测试的结果。...死锁信息对应的命令行输出如下: mysql:yeyztest 22:14:18>>begin; Query OK, 0 rows affected (0.00 sec) mysql:yeyztest 22...该网址上面的例子,几乎完整的复现了上述死锁的情况,就是说,加入有两条并发的insert操作要对同一条记录加共享锁,而此时这条记录又被其他事务加上了排它锁,当排它锁的事务回滚或者提交之后,两个并发的insert...操作是会发生死锁的,原因是由于这两条并发的insert操作,都对这条记录加上了共享锁,所以都无法获取该条记录的排它锁,除非一条insert语句回滚。

    2.1K20

    GreatSQL死锁案例分析及扩展解读

    1.背景概述 客户业务发生死锁的报错,根据业务程序日志及业务流程,发现造成死锁的原因是:事务1 delete + insert ,事务2 delete + insert,这两个事务交替执行导致的死锁;...由于GAP锁阻塞了插入意向锁,并且当delete的数据存在时死锁不会发生,当delete的数据不存在时,会发生死锁。...9 | +------+------+------+------+ 4 rows in set (0.01 sec) 2.2 事务执行顺序 按以下事务执行顺序,如果要删除的数据存在,则不会发生死锁...;如果要删除的数据不存,并且要删除的数据在同一个GAP锁的区间内则会发生死锁; 时间事务1事务2T1BEGIN;BEGIN;T2delete from test where c1=?...3.总结 此次死锁的发生主要是GAP 锁 和 插入意向锁的冲突,建议让业务修改一下逻辑,先判断数据是否存在 select 一下,存在的话 delete 后在 insert ; 不存在的话直接 insert

    10610
    领券