【问题标题】:How safe is to use Postgres multiple schemas?使用 Postgres 多个模式有多安全?
【发布时间】:2018-08-01 13:23:45
【问题描述】:

Heroku 警告在 Postgres 中使用多个模式。但是没有指定numerous operational problems引起的。

如 Heroku 文档中所述:

在数据库中使用多个模式的最常见用例是 构建一个软件即服务应用程序,其中每个客户都有 他们自己的架构。虽然这种技术看起来很有说服力,但我们强烈 推荐反对它,因为它已经导致了无数的操作案例 问题。例如,即使是中等数量的模式(> 50)也可以 严重影响 Heroku 数据库快照工具的性能, PG 备份。

我认为,添加follower db可以解决Backup的问题。

我每个模式都有60 表,因此使用1000 模式我将拥有60,000 表。这将如何影响数据库性能?扩展时我会遇到什么样的问题?

【问题讨论】:

  • 一篇关于该主题的非常机智的文章-> influitive.io/…
  • 题外话 - 为什么你计划创建 1000 个模式,每个模式有 60 个表?这似乎是表分区而不是制作 1000 个模式的完美案例? postgresql.org/docs/11/static/ddl-partitioning.html
  • Schemas 提供可靠的数据隔离,而不是管理1000 数据库管理1000 模式会更容易。
  • 在分区表上使用复合 pk 管理 1 个数据库将比 1000 个模式容易得多。

标签: postgresql heroku database-administration


【解决方案1】:

运行大量架构和/或表的第一个问题通常不会干扰正在运行的数据库。操作员遇到的主要问题是他们将无法创建数据库的逻辑备份。运行 heroku pg:backups 可能会失败,就像手动运行 pg_dump 一样。通常,这是您将在尝试的备份日志中看到的错误:

ERROR: out of shared memory HINT: You might need to increase max_locks_per_transaction

所需的大量锁最终导致数据库出现 OOM 条件。这在 Heroku 上并不总是一个问题。如果您使用的是生产数据库,您可以依靠他们的point-in-time 恢复选项作为您的 DR 解决方案。话虽如此,如果您无法运行逻辑备份,则从 Heroku 导出数据将很困难,因为它们目前不支持外部复制。这不太理想,但假设您可以尝试按模式转储数据库模式以避免 OOM 条件。

【讨论】:

  • 在某些时候会有数千个表分布在不同的模式中会成为一个问题吗?例如。我每个模式有 60 个表,所以如果有 1000 个模式,我将有 60,000 个表。
  • 是的,大量的表可以产生类似的效果。我完全希望在 1k 模式中看到 60k 表的上述问题。
  • 除了在生产中运行的应用程序的逻辑备份之外,您能预见任何其他问题吗?
猜你喜欢
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
  • 2013-02-04
  • 2019-05-23
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
相关资源
最近更新 更多