你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Cosmos DB 中自动缩放预配吞吐量的常见问题解答

适用对象: NoSQL MongoDB Cassandra Gremlin

使用自动缩放预配吞吐量,Azure Cosmos DB 会根据使用情况自动管理并缩放数据库或容器的每秒请求单位 (RU/秒)。 本文解答了有关 Azure Cosmos DB 自动缩放的常见问题。

Azure Cosmos DB 中的“自动缩放”和“autopilot”之间有何区别?

自动缩放自动缩放预配的吞吐量是 Azure Cosmos DB 功能(以前称为 autopilot)更新后的名称。 在最新版本的自动缩放中,我们添加了新功能,包括编程支持和设置自定义最大 RU/秒的功能。

在以前的 autopilot 层模型中创建的数据库或容器会有什么变化?

新的自动缩放自定义最大 RU/s 模型自动支持在以前的层模型中创建的资源。 该层的上限成为新的最大 RU/s,这产生相同的缩放范围。

例如,如果之前选择了缩放范围在 400 RU/秒到 4000 RU/秒的层,那么数据库或容器现在将显示 4000 RU/秒内的最大 RU/秒,其缩放范围是 400 RU/秒到 4000 RU/秒。 然后,可以根据自己的工作负荷,将最大 RU/秒更改为自定义值。

自动缩放的入口点 RU/秒是多少?

从 2022 年 4 月开始,自动缩放的最大 RU/秒可以设置为低至 1000 RU/秒(缩放范围在 100 RU/秒 - 1000 RU/秒之间)。 还可以将缩放范围设置为 200 RU/s 到 2000 RU/秒或者 300 RU/s 到 3000 RU/秒。 以前,入口点是 400 - 4000 RU/秒。

对于吞吐量要求较低,但仍可能扩展到最大 RU/秒的工作负载,建议使用此配置。

自动缩放功能根据流量增加而扩展的速度有多快?

使用自动缩放,系统会根据传入流量在 0.1 x TmaxTmax 范围内将吞吐量(RU/秒)增加 T 或减少 T。 因为缩放是自动且即时的,所以可在任何时间点无延迟地使用吞吐量(最多使用预配的 Tmax)。

如何确定系统当前缩放到的吞吐量 (RU/s)?

使用 Azure Monitor 指标来监视预配的自动缩放最大 RU/秒和系统当前缩放到的吞吐量(RU/秒)。

自动缩放采用何种定价方式?

每小时都会按系统在该小时内缩放到的最高吞吐量 T 进行计费。 如果你的资源在该小时内没有请求,或者缩放范围未超出 0.1 x Tmax,将按照 0.1 x Tmax 的最低费用收取。 请参考 Azure Cosmos DB 定价页面了解详细信息。

自动缩放如何显示在我的帐单上?

在单写入区域帐户中,每 100 RU/s 的自动缩放费率是标准(手动)预配吞吐量费率的 1.5 倍。 帐单上显示的是现有的标准预配吞吐量的计量。 将此计量器中的数量乘以 1.5。 例如,如果系统在一小时内扩展到的最高 RU/秒为 6000 RU/秒,则你在该小时应付的费用为:60 x 1.5 = 90 个计量单位。

在具有多个写入区域的帐户中,每 100 RU/s 的自动缩放费率与标准(手动)预配的多写入区域吞吐量费率相同。 在帐单上,你可看到现有的多写入区域计量。 由于费率是相同的,因此,如果使用自动缩放,帐单上将显示与标准吞吐量相同的数量。

自动缩放是否可用于预留容量?

是的。 获取单写入区域的帐户的预留容量后,自动缩放资源的预留折扣将应用于计量使用量,比率为特定区域比率的 1.5 倍。 例如,如果要使用预留容量来覆盖 10,000 个自动缩放 RU/秒,应计划购买 15,000 RU/秒的总预留容量。

多写入区域预留容量同样适用于自动缩放和标准(手动)预配吞吐量。 有关详细信息,请参阅 Azure Cosmos DB 预留容量

自动缩放是否适用于 Azure Cosmos DB 免费层?

是的。 在免费层,可以在数据库或容器上使用自动缩放吞吐量。 详细了解如何对自动缩放使用免费层计费模式

是否所有 API 都支持自动缩放?

是的。 所有 API 都支持自动缩放:NoSQL、Gremlin、Table、Cassandra 和 MongoDB。

多区域写入帐户是否支持自动缩放?

是的。 添加到 Azure Cosmos DB 帐户的每个区域中都提供最大 RU/秒。

如何对新数据库或容器启用自动缩放?

是否能在现有的数据库或容器上启用自动缩放?

是的。 还可以在自动缩放与标准(手动)预配吞吐量之间切换。 目前,对于所有 API,都可以使用 Azure 门户Azure 命令行接口PowerShell 来执行这些操作。 根据设计,不能使用 Azure Cosmos DB 客户端 SDK 或 Azure 资源管理器模板在手动预配吞吐量和自动缩放之间迁移。 但是,可以使用客户端 SDK 或 Azure 资源管理器模板来创建新的自动缩放资源,并更改现有自动缩放资源的最大 RU/秒。

自动缩放和标准(手动)预配的吞吐量之间的迁移是如何工作的?

从概念上讲,更改吞吐量类型是一个两阶段的过程。 首先,发送请求,更改吞吐量设置以使用自动缩放或手动预配的吞吐量。 在这两种情况下,系统将根据当前吞吐量设置和存储来自动确定和设置初始 RU/秒的值。 在此步骤中,不接受用户提供的 RU/秒值。 然后,在更新完成后,可以根据自己的工作负荷更改 RU/秒

从标准(手动)预配吞吐量迁移到自动缩放

对于容器,请使用以下公式估计初始的自动缩放最大 RU/秒:

MAX(1,000, current manual provisioned RU/s, maximum RU/s ever provisioned / 10, storage in GB × 10),舍入为最接近的 1000 RU/秒。

实际初始的自动缩放最大 RU/秒可能因帐户配置而异。

示例 1:假设有一个容器,其中包含 10000 RU/秒的手动预配吞吐量和 25 GB 的存储空间。 启用自动缩放后,初始自动缩放的最大 RU/秒将为 10000 RU/秒(在 1000 - 10000 RU/秒之间缩放)。

示例 2:假设有一个容器,其中包含 50000 RU/秒的手动预配吞吐量和 25000 GB 的存储空间。 启用自动缩放后,初始自动缩放的最大 RU/秒将为 250000 RU/秒(在 25000 - 250000 RU/秒之间缩放)。

从自动缩放迁移到标准(手动)预配吞吐量

初始手动预配吞吐量等于当前的自动缩放最大 RU/秒。

示例:自动缩放数据库或容器的最大 RU/秒为 20000 RU/秒(缩放范围为 2000 RU/秒 到 20000 RU/秒) 。 更新后以使用手动预配吞吐量时,初始吞吐量将为 20,000 RU/秒。

是否可以使用 Azure CLI、PowerShell 或 Azure 资源管理器来管理使用自动缩放功能的数据库或容器?

是的。 若要以编程方式在现有数据库或容器上启用自动缩放,可以使用 Azure CLIPowerShell

若要使用自动缩放功能创建新的数据库或容器,可以使用 Azure CLIPowerShellAzure 资源管理器模板

共享吞吐量数据库是否支持自动缩放?

是的。 若要为共享吞吐量数据库启用自动缩放,请在创建数据库时选择“自动缩放”和“预配吞吐量”选项。

启用自动缩放后,每个共享吞吐量数据库允许多少个容器?

Azure Cosmos DB 在共享吞吐量数据库中强制执行最多 25 个容器。 最大值适用于使用自动缩放或标准 (手动) 吞吐量的数据库。

自动缩放如何影响数据库一致性级别?

自动缩放不会影响数据库的一致性级别。

有关详细信息,请参阅一致性级别

与每个最大 RU/秒选项关联的存储空间上限是多少?

每个最大 RU/秒的存储限制(以 GB 为单位)是数据库或容器的最大 RU/秒的十分之一。 例如,如果最大 RU/秒为 20000 RU/秒,则该资源可以支持 2000 GB 的存储空间。

有关可用的最大 RU/秒和存储选项,请参阅预配吞吐量自动缩放限制

如果超出了与最大吞吐量关联的存储空间上限,会发生什么情况?

如果超出了与数据库或容器的最大吞吐量关联的存储空间上限,则 Azure Cosmos DB 会自动将最大吞吐量增加到可支持该级别存储的下一个最大 RU/秒。

例如,如果最初的最大 RU/秒为 50000 RU/秒(在 5000 RU/秒到 50000 RU/秒之间缩放),则最多可存储 5000 GB 数据。 如果存储大小增加到 5001 GB,则存储大小现在为 6000 GB,新的最大 RU/秒为 60000 RU/秒(在 6000 RU/秒到 60000 RU/秒之间缩放)。

是否能更改数据库或容器的最大 RU/秒?

是的。 有关详细信息,请参阅如何预配自动缩放吞吐量

更改最大 RU/秒时,根据请求的值,异步操作可能需要 4 到 6 小时才能完成。 了解详细信息

如何增加最大 RU/秒?

当你发送请求以增加最大 RU/秒Tmax时,该服务将预配更多资源来支持更大的最大 RU/秒,具体取决于所选的最大 RU/秒。 发生这种情况时,现有工作负载和操作不会受到影响。 系统将继续在以前的 0.1 x TmaxTmax 之间缩放数据库或容器,直到新的缩放范围(0.1 x Tmax_newTmax_new)准备就绪。

如何降低最大 RU/秒?

降低最大 RU/秒时,可设置的最小 RU/秒值为 MAX(1,000, highest maximum RU/s ever provisioned / 10, current storage in GB × 10),舍入为最接近的 1000 RU/秒。

示例 1:自动缩放容器的最大 RU/秒为 20000 RU/秒(缩放范围为 2000 RU/秒 到 20000 RU/秒),存储大小为 1500 GB。 可设置的最大 RU/秒的最低值是 MAX(1,000, 20,000 / 10, 1,500 × 10) = 15000 RU/秒(缩放范围为 1500 RU/秒 - 15000 RU/秒)。

示例 2:自动缩放容器的最大 RU/秒为 100000 RU/秒,存储大小为 100 GB。 现在,最多可将最大 RU/秒增加到 150000 RU/秒(缩放范围为 15000 RU/秒到 150000 RU/秒)。 可设置的最大 RU/秒的最低值是 MAX(1,000, 150,000 / 10, 100 × 10) = 15000 RU/秒(缩放范围为 1500 RU/秒 - 15000 RU/秒)。

对于共享吞吐量数据库,减少最大 RU/秒时,可设置的最小值为 MAX(1,000, highest maximum RU/s ever provisioned / 10, current storage in GB × 10, 1,000 + (MAX(Container count - 25, 0) × 1,000)),舍入为最接近的 1000 RU/秒。

这些公式和示例适用于可以设置的自动缩放最大 RU/秒的最小值。 它们独立于系统自动缩放到的范围 0.1 x TmaxTmax。 无论最大 RU/秒如何,系统始终在 0.1 × TmaxTmax之间缩放。

TTL 如何与自动缩放一起工作?

使用自动缩放时,生存时间 (TTL) 操作不会影响 RU/秒的缩放。 由于 TTL 操作而使用的任何 RU 都不属于自动缩放容器的计费 RU/秒。

例如,对于具有 400 RU/秒 到 4000 RU/秒的自动缩放容器:

  • 1 小时:T=0:容器未执行操作(没有 TTL 或工作负载请求)。 计费 RU/s 为 400 RU/s。
  • 1 小时:T=1:已启用 TTL。
  • 1 小时:T=2:容器开始获取请求。 请求在 1 秒内消耗 1000 RU。 使用价值 TTL 的 200 RU。 可计费的 RU/秒仍为1000 RU/秒。 无论 TTL 删除何时发生,它们都不会影响自动缩放的缩放逻辑。

最大 RU/秒如何映射到物理分区?

首次选择最大 RU/秒时,Azure Cosmos DB 通过将最大 RU/秒除以 10000 RU/秒来预配所需的物理分区数。 每个物理分区最多可支持 10,000 RU/s 和 50 GB 的存储。 随着存储大小的增长,Azure Cosmos DB 会自动拆分分区,以便添加更多物理分区来处理存储增加情况。 如果存储 超过关联的限制 ,Azure Cosmos DB 将增加最大 RU/秒。

数据库或容器的最大 RU/秒在所有物理分区之间平均划分。 任何单个物理分区可缩放到的总吞吐量是数据库或容器的最大 RU/秒除以物理分区数。

如果传入请求超过数据库或容器的最大 RU/秒,会发生什么?

如果整体使用的 RU/秒超过了数据库或容器的最大 RU/秒,超出最大 RU/秒的请求将受到限制,并返回 429 状态代码。 导致规范化利用率超过 100% 的请求将受到限制。 标准化利用率为所有物理分区的 RU/秒利用率的最大值。

例如,假设最大吞吐量为 20000 RU/秒,两个物理分区为 P_1 和 P_2。 每个分区能够扩展到 10000 RU/秒。 在给定的秒内,如果 P_1 使用了 6000 RU,而 P_2 使用了 8000 RU,则标准化利用率为 MAX(6,000 RU / 10,000 RU, 8,000 RU / 10,000 RU) = 0.8。

注意

Azure Cosmos DB 客户端 SDK 和数据导入工具 (Azure 数据工厂,批量执行程序库) 返回代码 429 错误后会自动重试,因此偶尔出现代码 429 错误不会有问题。 持续大量出现代码 429 错误可能表明需要增加最大 RU/秒,或查看针对热分区的分区策略。

启用自动缩放后,是否会出现限制或速率限制错误?

是的。 在两个情况下可能出现代码啊 429 错误。

第一种情况是,当总体消耗的 RU/秒超过数据库或容器的最大 RU/秒时,服务将相应地限制请求。

第二种情况是,如果一个逻辑分区键值的请求数与其他分区键值的请求数相比过高(如在热分区中),则基础物理分区可能超出其 RU/秒的预算。 为避免出现热分区,最佳做法是选择良好的分区键,从而实现存储和吞吐量的均匀分布。

例如,如果选择“20000 RU/秒最大吞吐量”选项,有 200 GB 的存储空间,如果有 4 个物理分区,则每个物理分区最多可以自动扩展到 5000 RU/秒。 如果热分区位于特定的逻辑分区键上,则当热分区所在的基础物理分区超过 5000 RU/秒或 100% 的规范化利用率时,会看到代码 429 错误。

使用自动缩放时看到代码 429 错误并不一定表示数据库或容器存在问题。 通常,对于生产工作负载,如果 1% 到 5% 的请求出现代码 429 错误,并且端到端延迟是可接受的,则错误是 RU/秒被充分利用的正常信号。 不需要执行任何操作。

详细了解如何解释和调试代码 429 速率限制错误

如果自动缩放未扩展到最大 RU/秒,规范化 RU/秒消耗量能否达到 100%?

是的。 有关详细信息,请参阅监视规范化 RU/秒