我最近在使用django中的一个大型MySQL数据库时遇到了一些问题,MySQL似乎遇到了死锁问题。
我一直收到错误:
(1213, 'Deadlock found when trying to get lock; try restarting transaction')通常,当为新的模型实例(例如)调用save或create函数时,似乎会发生这种情况。
payment = Payment.objects.create(
to_member=to_member,
to_name="%s" % to_member.username,
from_member=from_member,
from_name="%s" % from_member.username,
description="Resubscription",
type='resubscription',
amount=5.00,
currency=from_member,
processor='e-wallet'
)我尝试插入的特定表大约有310万行,大小为2.2 GB。
在生产环境中,应用程序有相当多的活跃用户(成员)。支付模型有两个特殊的外键(to_creator和from_member)。因此,我想知道这是否可能是问题的原因,而不仅仅是支付模式的原因?
我已经尝试过调整mysql配置的各个方面来处理这个问题,但是我似乎要么得到更多的死锁,要么整个系统都被锁住了!
以下是我对锁的当前设置:
任何帮助都将不胜感激。在过去的几天里,我一直在为这件事而烦恼。
丹
发布于 2021-10-13 18:54:32
首先,有没有数据丢失?事务中的错误意味着它没有实现,理论上您的数据是完好的。
其次,对于这么小的数据库来说,这不是一种正常的情况(是的,我看到它是2 2GB,是的,它非常小,甚至整个数据库都可以缓存在RAM中)。
让我们检查一下:您是否覆盖了Payment模型的.save()方法?如果是,请告诉我们您在那里看到的更多信息。
在已经被阻塞的代码中有一些阻塞代码,你需要找到它。
https://stackoverflow.com/questions/69556718
复制相似问题