欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

项目中死锁问题简单记录 博客分类: java 死锁 

程序员文章站 2024-03-01 23:40:16
...
并发死锁问题
项目上线后发现死锁问题,数据量级并不大,现将分析过程和解决方案整理一下,以作记录
场景:申购,赎回两个接口并发做下单操作
描述:并发下单操作时,频繁的更新同一张表同一条记录,导致死锁现象发生
问题分析:由于是并发操作下才会出现死锁,考虑到有可能是两个接口当中的业务更新sql有交叉的可能,导致了互相竞争锁资源引起死锁问题
解决方案;分析两个业务的所有sql及执行顺序,找出交叉的业务(sql), 然后调整sql的执行顺序,保证两个业务sql执行顺序一致
结果:测试环境下测试并发同时下单正常,问题解决


上线之后发现问题依然存在,只是发生死锁的频率降低了,于是有接着找原因
分析之前引起死锁的操作场景可能并不是只有在并发下单那块,这里只是引起死锁问题的一个操作而已
后台业务系统做业务(保密业务不便说明)时也会频繁的做更新操作并且和下单的操作竞争资源,导致了问题的发生。

解决方案:整理出涉及到的相关业务操作,做排队处理(具体的排队方案就不在这里陈述),不再做并发更新操作。同时为了避免用户下单失败(死锁引起的)在代码中捕获死锁异常,进行重试操作。
结果:测试正常,上线后死锁问题再未发生

总结;排队之后在处理业务及时性上有一定延迟(牺牲了一些性能),好在这个系统的实时性要求并不高。

这里仅仅是大致记录一下死锁的发生,分析,解决的一个过程。

不知道大家在遇到死锁问题都是如何解决的?
相关标签: 死锁