保护PostgresDB不受太多事务的影响

2024-04-27 04:18:19 发布

您现在位置:Python中文网/ 问答频道 /正文

最近,当应用程序中的某个edgecase被触发时,我们发生了一次中断。它看起来有点像这样:

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处理程序中,所有这些处理程序都开始遇到重复,导致几十万个事务,并导致数据库过载。你知道吗

我们可以尝试审计我们的应用程序,以确保我们不会再看到这样的问题,但我们也想知道是否有一种方法可以防止过多的事务使我们的数据库过载(这类问题的系统性修复)?你知道吗


Tags: add数据库应用程序处理程序dbsession情况items