亚马逊 DocumentDB 无服务器扩展配置 - Amazon DocumentDB

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

亚马逊 DocumentDB 无服务器扩展配置

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

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

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

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

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

为文档数据库无服务器集群选择MinCapacity设置

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

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

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

    例如,假设您在集群的工作负载较低时使用db.r6g.xlarge实例类。该实例类有 32 GiB 的内存。因此,您可以指定 16 MinCapacity 中的一个,以设置一个可以缩小到大致相同容量的无服务器实例。这是因为每个 DCU 对应大约 2 GiB 的内存。您可以指定一个稍低一点的值,让实例进一步缩小规模,以防您的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到更高的值。有关更多信息,请参阅 亚马逊 DocumentDB 无服务器实例限制

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 某些实例限制由实例的当前容量决定,例如连接限制、游标限制和未结交易限制。在为工作负载选择MaxCapacity值时,请务必牢记这些实例限制,以免受到其中一个限制的瓶颈。有关更多信息,请参阅 亚马逊 DocumentDB 无服务器实例限制

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

避免 out-of-memory错误

如果您的一个 DocumentDB 无服务器实例一直达到其最大容量限制,Amazon DocumentDB 会通过将该实例设置为参数不兼容状态来表示这种情况。当实例处于参数不兼容状态时,某些操作会被阻止。例如,您无法升级引擎版本。有关亚马逊文档数据库实例状态的更多信息,请参阅监控亚马逊文档数据库实例的状态。

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

如果内存压力降低,导致实例无法经常达到其最大容量,则 Amazon DocumentDB 会自动将实例状态更改回可用。

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

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

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

  • 关闭需要内存开销的配置设置。例如,假设你开启了 Performance Insights 等功能,但没有使用它。如果是这样,你可以将其关闭。或者,您可以将集群的最小和最大容量值调整得更高,以考虑这些类型的功能所使用的内存。有关选择最小和最大容量设置的指引,请参阅为 DocumentDB 无服务器集群选择扩展容量范围

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

为什么我的无服务器实例无法缩小规模?

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

  • Performance Insights 可以增加资源使用量,防止数据库缩小到最小容量。这些功能如下所示:

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

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

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

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

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