0

我最近在 django 中使用大型 MySQL 数据库时遇到了一些问题,MySQL 似乎遇到了死锁问题。

我不断收到错误:

(1213, 'Deadlock found when trying to get lock; try restarting transaction')

通常这似乎发生在为新模型实例(例如)调用保存或创建函数时。

                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。

在生产中,该应用程序有相当多的活跃用户(会员)。Payment 模型有两个特定的外键(to_creator 和 from_member)。所以我想知道这是否可能是问题的原因,而不仅仅是支付模型?

我已经尝试调整 mysql 配置的各个方面来管理它,但我似乎要么遇到更多死锁,要么整个系统都锁定了!

以下是我当前的锁设置:

数据库锁

任何帮助将不胜感激。在过去的几天里,我一直在为此烦恼。

4

1 回答 1

0

首先,有没有数据丢失?交易中的错误意味着它没有实现,理论上你的数据是好的。

其次 - 对于这么小的数据库来说,这不是正常情况(是的,我看到它是 2GB,是的,它非常小,甚至整个数据库都可以缓存在 RAM 中)。

让我们检查一下:您是否有覆盖模型.save()的方法Payment?如果是,请告诉我们更多关于您在那里看到的内容。

在已经被阻塞的代码中有一些阻塞代码,您需要找到它。

于 2021-10-13T18:54:32.197 回答