我们在亚马逊RDS平台上托管MySQL数据库。我们看到了很多由于锁定而导致的死锁问题。我试图理解死锁转储报告,它粗略地描述了受影响的事务&锁的数量等。以下是这样的跟踪:
2017-12-14 09:00:21 2ba3a5758700
*** (1) TRANSACTION:
TRANSACTION 1297355720, ACTIVE 0 sec inserting
mysql tables in use 1, locked 1
LOCK WAIT 7 lock struct(s), heap size 1184, 3 row lock(s), undo log entries 1
MySQL thread id 9198894, OS thread handle 0x2ba0b33da700, query id 5198593130在上面的跟踪中,第四行是- 'mysql tables in use 1, locked 1‘。“锁定1”是什么意思?这是否意味着相关的表在事务期间被完全锁定?
我们没有显式地锁定表。我们在某些地方使用了Django @transaction.atomic,但是我们的代码中没有显式的表锁。
请帮助我了解如何调试表锁定问题。
发布于 2017-12-15 19:58:08
检查所有有@transaction.atomic的地方,看看它们是否在每个这样的代码块中以相同的顺序修改表。如果不是,这是最有可能发生死锁的地方。
https://stackoverflow.com/questions/47817999
复制相似问题