ZBLOG

------------------------ LATEST DETECTED DEADLOCK ------------------------ 2024-05-16 07:14:53 0x7f83992a6700 *** (1) TRANSACTION: TRANSACTION 21271120774, ACTIVE 0 sec fetching rows mysql tables in use 1, locked 1 LOCK WAIT 64 lock struct(s), he...

根据你提供的死锁信息,我们可以分析出以下几点:

  1. 死锁情况概述

    • 事务 (1) 正在执行删除操作,试图获取对 LAAssessAccessoryTrial 表中某一记录的独占锁(X lock)。
    • 事务 (2) 正在进行插入操作,并持有对同一记录的共享锁(S lock),同时也在等待获取该记录的独占锁。
  2. 阻塞链

    • 事务 (1) 在尝试获取一个独占锁时被阻塞,因为它正在等待另一个已经被事务 (2) 持有的共享锁。
    • 事务 (2) 则持有对该记录的共享锁,但它想要获取一个独占锁,而这又依赖于事务 (1) 的释放。
  3. 解决方案

    • MySQL 检测到这种循环依赖后,会选择回滚其中一个事务来打破死lock。在这个例子中,系统选择了回滚事务 (2)。
  4. 改进建议

    • 确保对同一行数据的访问遵循相同的顺序,可以避免大部分死锁问题。例如,如果所有相关代码始终以相同顺序访问表中的行,则可以减少发生死锁的几率。
    • 考虑减少每个事务中处理的数据量,将长时间运行的操作拆分为较小、更快完成的小批次。
    • 使用适当级别的隔离级别。如果没有必要,可以考虑使用更低的隔离级别(如读已提交)来减少冲突。
  5. 具体查询分析

    • 查询 (1):正在执行删除操作 DELETE FROM LAAssessAccessoryTrial WHERE indexcalno='202405' AND branchtype='4' AND basecode = 'B00010' AND AssessType = '01' AND managecom LIKE '11001%'
    • 查询 (2):正在执行插入操作,涉及大量字段和复杂逻辑,需要注意保持简洁以降低资源消耗。

通过以上分析,可以采取措施优化代码和数据库设计,从而减轻甚至消除死锁发生。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=18923

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?