Amazon Aurora PostgreSQL:克隆能力:缺点?

Amazon Aurora PostgreSQL: clone capability: down sides?

我有一个与 Amazon Aurora PostgreSQL 兼容的数据库,运行 作为 "live" 试点实例。

我计划在明年初进行正式的生产过渡,我曾设想这将包括创建开发和测试实例、开始快照恢复等。此外,我迫切需要做一些数据模型改进,这对现有视图和过程有潜在影响,我不愿意在 "live" 实例中这样做,尽管目前停机没有直接影响。

我已阅读有关 Aurora 克隆的 Amazon 文档,但未能找到任何 "real-world" 文章或帖子介绍如何在实践中使用它。我看到一篇非亚马逊文章,实际上只是重述了亚马逊摘要。

有没有人直接体验过此功能?还是内部的力学知识?具体来说:

  1. 你能独立地对每个实例进行 DDL(架构)更改吗?文档中没有提到这一点。我不确定术语 "clone" 的使用是否意味着它们在结构上保持相同,但考虑到引用的用例,我无法想象您基本上是通过克隆来冻结数据库结构。
  2. 是否有任何性能影响(考虑到 "frozen" 共享页面和实例特定页面之间的存储分布?
  3. 如果您创建数据库的克隆,然后删除该克隆,您是否不可逆转地更改了原始数据库的存储模式(包括该过程的任何性能影响)?
  4. 它会改变后台删除的行为吗?我对 Aurora 存储的工作方式一无所知(通常对数据库存储只有零星的了解),但在过去,可以为已删除的数据回收存储。在此模型中,如果您克隆数据库,然后从 table 中删除几行,会发生什么?

我将通过创建 "old-fashioned clone"(快照恢复到新实例)然后克隆它来测试它,但在此期间收到的任何见解都非常感谢!

  1. 是的,您可以对克隆进行架构更改,它们根本不会影响基础数据库。它们将导致克隆需要复制 table 中的每一页,因为原始页面都需要为克隆进行更改。
  2. 这取决于 - 我们已经看到,如果您修改大型 table 的架构,克隆可能会非常慢 - 我没有官方解释,但我认为这是因为克隆是必须 link 通过原始页面指针才能到达其副本,这对于小 table 或大 table 中相对较少的页面来说很好,但是一旦整个table 本质上是由于架构更改而复制的,我们看到亚秒 SELECT 查询在克隆上花费 80 秒的情况。我会说实际的模式更改没有比预期的时间更长。
  3. 不,原始数据库的页面永远不会被克隆触及,它们会被使用,直到克隆修改它们,此时它们被复制仅供克隆使用。如果您稍后删除整个原始数据库或整个克隆数据库也没关系,这两个数据库就好像它们完全独立于彼此一样工作,它们只共享未更改的页面。
  4. 不,与 3 的答案基本相同。如果您删除克隆中的行,则包含这些行的页面将被复制用于克隆,而原始页面将保持不变。

正如您所描述的,我们正在使用克隆进行开发和暂存生产副本,并且效果很好,但正如我所说,有一种情况(架构更改为大 table),我们看到一些非常表现不佳。总的来说,性能很好,我们没有发现常规 INSERT、UPDATE 或 DELETE 的性能有任何 table 差异 - 如果您 运行 触及大部分的巨大更新,它可能会更明显行数很大 table,但对于常规应用程序工作,它表现良好。