【发布时间】:2018-12-23 05:10:19
【问题描述】:
我不得不将企业 Django 1.11 站点从企业托管的 PostgreSQL 9.4 服务器切换到 AWS RDS Aurora-PostgreSQL 10 集群。我最初的印象是它应该是一个简单的迁移,因为我没有使用任何特定于版本的代码。
迁移后,该网站立即开始严重崩溃。过去需要几毫秒的查询突然跳到了 100 倍的时间,导致整个 gunicorn 线程超时。我还不断看到 RDS 和 Django 都断开连接。
它一直看起来好像是我需要在以前的服务器和当前服务器之间进行匹配的一些设置,但是尽管有 PostgreSQL 专家和 AWS 支持,但没有简单的答案(甚至是复杂的答案)。最后,我不得不微调 Django 代码中的大多数查询,以使网站更加稳定。
该应用程序有几个引用外部关系的查询,所以我使用了一些 prefetch_related 和类似的技巧来解决减速问题。因此,一个耗时 0.5 秒的查询变成了 80 秒,而在我添加了 prefetch_related 之后,又回到了 0.5 秒。
尽管该站点现在已经稳定,但我发布此内容是希望一些 PostgreSQL 和/或 Django 专家看到这一点并将其识别为某些错误设置的症状。我无法分享示例查询,也不要求查询优化。问题是:当我们从一台 PostgreSQL 服务器移动到另一台服务器时,什么会导致查询变慢 100 倍,而应用程序代码没有变化?
【问题讨论】:
标签: sql django postgresql django-orm amazon-aurora