更改 PostgreSQL 服务器更改了 Django 应用程序特征

Posted

技术标签:

【中文标题】更改 PostgreSQL 服务器更改了 Django 应用程序特征【英文标题】:Changing PostgreSQL server changed Django app characteristics 【发布时间】: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 倍,而应用程序代码没有变化?

【问题讨论】:

【参考方案1】:

一般来说,兼容 postgres 的 aurora 具有与普通 postgres 截然不同的性能特征,两者的配置和调优也可能大不相同。如果您想要获得接近自托管 postgres 的性能特征,那么最简单的前进路径是使用 AWS RDS for Postgres 而不是 AWS RDS 和 Aurora Postgres。有许多您未共享的配置详细信息会影响 RDS 和自托管服务器之间的性能,包括 VPC 设置、SSL 等,这些也会影响性能。

【讨论】:

你有任何引用来支持 postgres-compatible aurora 具有截然不同的性能特征的评论吗?

以上是关于更改 PostgreSQL 服务器更改了 Django 应用程序特征的主要内容,如果未能解决你的问题,请参考以下文章

怎么更改postgresql的安装语言

PostgreSQL:将字符串转换为没有时区的时间戳以更改时间日期时,我得到了意想不到的结果

PostgreSQL 函数和触发器在 postgresql 中包含更改

更改 PostgreSQL 中组角色的默认权限

在 Windows 7 上更改/重置 postgresql 用户密码

在Windows 7上更改/重置postgresql用户密码