qize0921
V2EX  ›  Django

Django 加上事务后报异常: Deadlock found when trying to get lock; try restarting transaction

  •  
  •   qize0921 · Mar 15, 2021 · 2798 views
    This topic created in 1918 days ago, the information mentioned may be changed or developed.

    Django 项目, 用的是 Mysql 数据库, 服务器开了 16 个线程在跑, 有加事务, 然后访问量上来后, 日志中时不时会出现 "Deadlock found when trying to get lock; try restarting transaction" 这样的异常, 这个异常是加事务那块代码抛出的

    在事务包裹的代码里, 大概执行了以下操作:

    • A 表 创建一条数据
    • 更新 A 表 外键中 B 表 的字段, 并保存
    • 更新 C 表 的字段, 并保存

    网上查了查 有的说是外键问题, 有的说是两条数据同时操作同一个表的问题, 没太搞明白, 想请教一下有没有遇到过类似情况的, 指点一下

    2 replies    2021-03-16 11:34:42 +08:00
    jenlors
        1
    jenlors  
       Mar 16, 2021   ❤️ 1
    明显是出现了死锁,看看事务包裹的代码是不是执行时间太长,尝试将一个大事务拆分为多个小事务,事务里面不要有网络请求等。
    qize0921
        2
    qize0921  
    OP
       Mar 16, 2021
    @long2ice 感谢回复 我检查了下代码 发现确实有相关的操作 应该是执行时间太长导致的 我已经修改 之后再观察观察
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1162 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 23:24 · PVG 07:24 · LAX 16:24 · JFK 19:24
    ♥ Do have faith in what you're doing.