最近,当我们的应用程序中的某个边框被触发时,我们发生了中断。看起来有点像这样:
items = [...] # about a 1000 items
try:
db.session.add_all(items)
db.session.commit()
except IntegrityError:
# try inserting one at a time, to find the conflict
for item in items:
db.session.add(item)
try:
db.session.commit()
except IntegrityError:
conflicts.append(item)
当项目数量很慢时(这种情况很少见),该代码运行良好。但是一些不好的东西汇集在一起,在许多情况下有重复,每个项目都成了交易。此代码位于API处理程序中,并且所有这些代码都开始遇到重复项,导致数十万个事务,并导致数据库被重载。
我们可以尝试审核我们的应用程序以确保我们不会再次看到这样的问题,但我们也想知道是否有办法防止过多的事务重载数据库(对此类问题进行系统修复)? / p>