Amazon DocumentDB 无服务器扩缩配置 - Amazon DocumentDB

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon DocumentDB 无服务器扩缩配置

为 DocumentDB 无服务器集群选择扩缩容量范围

在将任何 DocumentDB 无服务器实例添加到 Amazon DocumentDB 集群之前,必须先为集群设置 ServerlessV2ScalingConfiguration 参数。

ServerlessV2ScalingConfiguration 参数由两个值组成,这两个值定义了集群中任何无服务器实例的无服务器扩缩容量范围:

  • MinCapacity – 集群中任何 DocumentDB 无服务器实例的最小扩缩容量。

  • MaxCapacity – 集群中任何 DocumentDB 无服务器实例的最大扩缩容量。

为 DocumentDB 无服务器集群选择 MinCapacity 设置

最好是始终为 MinCapacity 选择 0.5。该值允许实例在完全空闲时缩减至最小容量,同时保持活动状态。但是,根据您使用该集群的方式和配置的其他设置,采用一个不同的最小容量可能更有效。选择最小容量设置时,请考虑以下因素:

  • DocumentDB 无服务器实例的扩缩率取决于其当前容量。当前容量越大,扩展速度就越快。如果您需要实例快速扩展到非常高的容量,请考虑将最小容量设置为其扩缩率可满足要求的值。

  • 如果您通常在预期工作负载特别高或特别低的情况下修改实例的实例类,则可以利用这个经验粗略估计等效的 DocumentDB 无服务器容量范围。要确定预置 Amazon DocumentDB 实例类型的内存大小,请参阅 实例限制

    例如,假设您在集群的工作负载较低时使用 db.r6g.xlarge 实例类。该实例类具有 32GiB 的内存。因此,您可以将 MinCapacity 指定为 16,以设置一个可以缩减至大约相同容量的无服务器实例。那是因为每个 DCU 对应大约 2GiB 的内存。如果 db.r6g.xlarge 实例有时未充分利用,您可以指定一个稍低的值,以便进一步缩减实例。

  • 如果当实例在缓冲区缓存中有一定量的数据时,应用程序的运行效率最高,请考虑指定一个最小 DCU 设置,让内存足够大,可以容纳经常访问的数据。否则,当无服务器实例缩减至较小的内存大小时,一些数据会从缓冲区缓存中移出。然后,随着时间的推移,当实例再扩展回来时,信息会读回到缓冲区缓存中。如果 I/O 要将数据带回缓冲区缓存的数量很大,则选择更高的最小 DCU 值可能会更有效。有关更多信息,请参阅 实例大小调整

  • 如果您的 DocumentDB 无服务器实例大部分时间都以特定容量运行,请考虑指定低于该基准但不要太低的最小容量设置。当前容量没有远低于所需容量时,无服务器实例可以最有效地估计扩展的规模和速度。

  • 如果您的预置工作负载的内存要求对于 T3 或 T4g 等小型实例类而言太高,请选择可提供与 R5 或 R6g 实例的内存相当的最低 DCU 设置。

  • 特别是,我们建议在使用指定功能时使用以下最低 MinCapacity(这些建议可能会发生变化):

    • 性能见解 — 2 DCUs

  • 在 Amazon DocumentDB 中,复制发生在存储层,因此读取器容量不会直接影响复制。但是,对于独立扩展的 DocumentDB 无服务器读取器实例,请确保在有密集写入操作期间,最低容量足以处理工作负载,从而避免查询延迟。如果提升层 2-15 的读取器实例遇到性能问题,请考虑增大集群的最小容量。有关更改读取器实例是随写入器扩缩还是独立扩缩的详细信息,请参阅 查看和修改无服务器读取器的提升层

    如果您的集群包含 DocumentDB 无服务器读取器实例,则当读取器的提升层不是 0 或 1 时,读取器不会随写入器实例一起扩展。在这种情况下,设置较低的最小容量会导致复制滞后过大。这是因为在数据库忙碌时,读取器可能没有足够的容量来应用来自写入器的更改。建议您将最小容量设置为一个值,该值表示与写入器实例相当的内存量和 CPU 量。

  • DocumentDB 无服务器实例从最小容量扩展到最大容量所花的时间取决于其最小和最大 DCU 值之间的差异。与实例从小容量开始的情况相比,当实例的当前容量很大时,DocumentDB 无服务器会以更大的增量扩展。因此,如果您指定了相对较大的最大容量,且实例的大部分运行时间都接近该容量,则请考虑增大最小 DCU 设置。这样,空闲实例可以更快地扩展回到最大容量。

  • 某些实例限制由无服务器实例的当前容量决定,例如连接限制、光标限制和未完成事务限制。如果实例的当前容量很小,则限制也将相应地很小。如果您的无服务器实例缩减到其 MinCapacity 值时存在这些限制问题,则可以考虑将 MinCapacity 增加到更高的值。有关更多信息,请参阅 Amazon DocumentDB 无服务器实例限制

  • 此外,如果设置为小于或等于 1.0,则某些实例限制的最大值上限为较低的最大值 DCUs,例如活动连接限制、游标限制和未结交易限制。MinCapacity如果这些上限不足以应付您的工作负载,请使用至少 1.5 DCUs 的MinCapacity值。有关更多信息,请参阅 Amazon DocumentDB 无服务器实例限制

有关如何修改集群扩缩配置的说明,请参阅 管理 Amazon DocumentDB 无服务器

为 DocumentDB 无服务器集群选择 MaxCapacity 设置

最好是始终为最大 DocumentDB 无服务器容量设置选择一些较高的值。较大的最大容量让实例可以在运行密集型工作负载时最大限度地扩展。使用较小的值可以避免产生意外费用。根据您使用该集群的方式以及配置的其他设置,最有效的值可能会比原先想象的值更高或更低。选择最大容量设置时,请考虑以下因素:

  • 最大容量必须至少与最小容量相同。可以将最小容量和最大容量设置为完全相同。但是,在这种情况下,容量永远不会扩展或缩减。因此,除了在测试状况下,对最小和最大容量使用完全相同的值并不合适。

  • 最大容量必须至少为 1.0 DCUs ,最多必须为 256 DCUs。

  • 我们建议监控无服务器实例的扩缩和资源使用情况。如果您的无服务器实例经常扩展到最大容量并达到资源限制(例如,当 DCUUtilization 指标为 100.0 时),我们建议您选择更高的 MaxCapacity 值。有关更多信息,请参阅 监控 Amazon DocumentDB 无服务器

  • 如果您通常在预期工作负载特别高或特别低的情况下修改预置实例的实例类,则可以利用这个经验估计等效的 DocumentDB 无服务器容量范围。要确定预置 Amazon DocumentDB 实例的内存大小,请参阅 实例限制

    例如,假设您在集群的工作负载较高时使用 db.r6g.4xlarge 实例类。该实例类具有 128GiB 的内存。因此,您可以将最大 DCU 设置指定为 64,从而设置一个可以扩展至大约相同容量的无服务器实例。那是因为每个 DCU 对应大约 2GiB 的内存。如果 db.r6g.4xlarge 实例有时没有足够的容量来有效处理工作负载,则可以指定一个稍高的值来让实例进一步扩展。

  • 如果您的数据库使用有预算上限,请选择一个即使所有无服务器实例始终以最大容量运行时仍能保持在该上限内的值。请记住,如果您的集群中有 n 个无服务器实例,则该集群在任何时刻可以使用的理论最大无服务器容量是 n 乘以集群的最大 DCU 设置。(例如,如果一些读取器独立于写入器进行扩展,则实际消耗量可能更少。)

  • 如果您使用无服务器读取器实例从写入器实例中分流一些只读工作负载,您可以选择较低的最大容量设置。这样做是为了反映这一点,每个读取器实例不需要像集群只包含一个实例那样扩展得那么高。

  • 假设您想防止由于应用程序中的数据库参数配置错误或低效查询而导致过度使用。在这种情况下,您可以通过选择一个最大容量设置,使之低于可以设置的绝对最高容量,从而避免意外过度使用。

  • 如果由于实际用户活动造成的峰值很少见但确实会发生,那么在选择最大容量设置时可以考虑这些情况。如果优先级是使应用程序以全面的性能和可扩展性保持运行,则可以指定比正常使用情况下的容量更大的最大容量设置。如果在非常极端的活动高峰期间应用程序可以降低吞吐量运行,则可以选择稍低的最大容量设置。确保选择的设置仍然有足够的内存和 CPU 资源以使应用程序保持运行。

  • 如果您在集群中启用了增加每个实例内存使用量的设置,请在决定最大 DCU 值时将该内存考虑在内。此类设置包括性能详情的相关设置。确保最大 DCU 值允许无服务器实例扩展到足以在使用这些功能时处理工作负载。有关排除由于低最大 DCU 设置和增加内存开销的 Amazon DocumentDB 功能组合而引起的问题的信息,请参阅下面的 避免 out-of-memory错误

  • 特别是,我们建议在使用指定功能时使用以下最低 MaxCapacity(这些建议可能会发生变化):

    • 在具有大量数据量的集群上创建无服务器实例 — 2 DCUs (这包括在集群还原过程中创建无服务器实例。)

  • 某些实例限制由实例的当前容量决定,例如连接限制、光标限制和未完成事务限制。在为工作负载选择 MaxCapacity 值时,请务必牢记这些实例限制,以避免因其中某项限制而成为瓶颈。有关更多信息,请参阅 Amazon DocumentDB 无服务器实例限制

有关如何修改集群扩缩配置的说明,请参阅 管理 Amazon DocumentDB 无服务器

避免 out-of-memory错误

如果您的其中一个 DocumentDB 无服务器实例持续达到最大容量的限制,Amazon DocumentDB 会通过将实例设置为 incompatible-parameters 状态来表明这种状况。实例处于 incompatible-parameters 状态时,某些操作会被阻止。例如,您无法升级引擎版本。有关 Amazon DocumentDB 实例状态的更多信息,请参阅监控 Amazon DocumentDB 实例的状态

通常,当您的实例由于 out-of-memory错误而频繁重启时,它会进入此状态。发生这种类型的重新启动时,Amazon DocumentDB 会记录一个事件。要查看资源事件,请参阅 查看 Amazon DocumentDB 事件。由于开启性能详情等设置会产生开销,因此通常会出现高内存使用率。实例上存在繁重的工作负载,或者要管理与大量架构对象相关联的元数据时,也会导致出现高内存使用率。

如果内存压力变得更低,以致实例不会经常达到最大容量,Amazon DocumentDB 会自动将实例状态更改回可用。

要从这种情况中恢复,您可以采取以下部分或全部操作:

  • 通过更改集群的最小 DocumentDB 容量单位(DCU)值,提高无服务器实例的容量下限。这样做可以避免空闲数据库缩减到某个容量,以至于内存太少,无法满足集群中启用的功能所需的内存。更改集群的 DCU 设置后,重启无服务器实例。这样做会评估 Amazon DocumentDB 是否可以将状态重置回可用。

  • 通过更改集群的最大 DCU 值,提高无服务器实例的容量上限。这样做可避免繁忙的数据库无法扩展到某个容量,以至于没有足够的内存来满足集群中启用的功能和数据库工作负载所需的内存。更改集群的 DCU 设置后,重启无服务器实例。这样做会评估 Amazon DocumentDB 是否可以将状态重置回可用。

  • 关闭需要内存开销的配置设置。例如,假设您已启用性能详情等功能,但尚未使用此功能。如果是这样,您可以将其关闭。或者,您可以将集群的最小和最大容量值调高,以便考虑到这些类型的功能使用的内存。有关选择最小和最大容量设置的指引,请参阅为 DocumentDB 无服务器集群选择扩缩容量范围

  • 减少实例上的工作负载。例如,您可以将读取器实例添加到集群中,以便将只读查询的负载分散到更多实例中。

为什么我的无服务器实例无法缩减?

在某些情况下,即使数据库上没有负载,DocumentDB 无服务器也不会缩减至最小容量。出现这种情况的原因如下:

  • 性能详情可以增加资源使用量并防止数据库缩减到最低容量。这些功能如下所示:

  • 如果读取器实例未缩减到最小值,并保持在与写入器实例相同或更高的容量,请检查读取器实例的优先级层。第 0 层或第 1 层的 DocumentDB 无服务器读取器实例的最小容量至少与写入器实例一样高。将读取器的优先级层更改为 2 或更高,这样它就可以独立于写入器而纵向扩展和缩减。有关更多信息,请参阅 Amazon DocumentDB 无服务器扩缩

  • 繁重的数据库工作负载可能会增加资源使用量。

  • 较大的数据库卷可能会增加资源使用量。Amazon DocumentDB 使用内存和 CPU 资源进行集群管理。Amazon DocumentDB 需要更多的 CPU 和内存来管理具有更大数据库卷的集群。如果您的集群的最小容量低于集群管理所需的最小容量,则您的集群不会缩减到最小容量。

  • 后台维护活动可能会定期增加资源使用量。

如果数据库仍无法缩减到配置的最小容量,则停止并重新启动数据库,以回收可能随着时间推移而累积的所有内存碎片。停止和启动数据库会导致停机,因此我们建议谨慎执行此操作。