【发布时间】:2020-09-09 08:16:00
【问题描述】:
更新“
APM 在更新行报告问题,即:
Model.objects.filter(id=model_id).update(field=True)
filter子句使用表的主键,django执行的查询是:
'UPDATE "model" SET "field" = true WHERE "model"."id" = 12345'
由于执行时间超过 5 秒而引发错误。
这段代码在一个 celery 任务中运行,该任务接收模型的 id 作为参数,并且大部分时间都正常执行。
我知道这是一个非常开放的问题,但对于可能发生的事情的任何想法或帮助表示赞赏。
我用完了 Python 3.7、Django 2.0.13 和 Postgres 9.5。
【问题讨论】:
-
过滤器中涉及的列是否被索引?如果您直接在 Postgres 上运行 query 并在其前面加上
EXPLAIN,它会返回什么? -
我确实使用此信息更新了问题。谢谢。
-
问题更新可能在某个地方丢失了,因为我看不到有关列索引的信息,也看不到
EXPLAIN。 -
您可以启用auto_explain 自动记录
EXPLAIN的慢查询(如果您有很多慢查询,可能会影响性能)。 -
它可能被锁阻塞了。您可以设置 log_lock_waits 以使其日志锁定等待时间长于 deadlock_timeout。
标签: python python-3.x django postgresql