我们的 Rails 应用程序使用 Apartment gem 存储客户端数据,它为每个租户创建一个模式。我们在 Heroku 上使用 Postgres 9.4。
一切正常,直到我们达到大约 600 个租户,突然我们的自动 pg 备份停止工作。Heroku 支持通知我们,他们无法执行备份,因为给定模式数量(大约 30,000 个)的表总数导致 pg_dump 遇到 OOM 错误。(我们尝试直接对本地机器执行 pg_dump 也失败了。)
Heroku 建议我们可以通过逐个模式备份我们的数据,例如,在 bash 脚本中循环遍历每个模式名称:
pg_dump -Fc "<db_credentials>" -n $schema >"$schema.dump"
这可行,但根据我们的计算,仅下载我们所有的数据就需要 40 多个小时(假设一切正常)。这有点令人沮丧,因为实际的数据量是花生(大约 4GB 未压缩)。
我们想考虑将我们的数据库导出到 Amazon RDS,但我们公司认为我们的客户不会容忍应用程序宕机两天(假设一切正常)。我们正在成长,潜在的迁移停机时间只会变得更糟,有效地将我们锁定在 Heroku 中。
问题:
有什么方法可以加快这个过程吗?(FWIW,做一个未压缩的 pg_dump 似乎并没有提高性能。)
这只是标准的数据库迁移停机时间,开发人员只需要告诉公司他们必须处理停机时间吗?