适用对象: NoSQL MongoDB Cassandra Gremlin 表
使用自动缩放预配吞吐量,Azure Cosmos DB 会根据使用情况自动管理并缩放数据库或容器的每秒请求单位 (RU/秒)。 本文解答了有关 Azure Cosmos DB 自动缩放的常见问题。
Azure Cosmos DB 中的自动缩放和动态缩放之间有何区别?
自动缩放或自动缩放预配的吞吐量根据最活跃的区域和分区缩放工作负载。 相比之下,动态自动缩放允许工作负载的区域和分区根据使用情况独立缩放。 我们建议向计划使用自动缩放的所有客户使用动态自动缩放。
如何以编程方式对帐户启用动态自动缩放?
可以将 Resource Manager 模板与 API 版本 2023-11-15-preview
或更新的预览版本结合使用,以将属性 enablePerRegionPerPartitionAutoscale
设置为 true。 可以使用预览版 2023-11-15-preview 或最新的预览版本在 JSON 视图中查看此属性。
还可以使用 Azure CLI 或 PowerShell。
// Add Azure Cosmos DB extension 2.0.6-preview for PowerShell
Install-Module -Name Az.CosmosDB -RequiredVersion 2.0.6-preview -AllowPrerelease -AllowClobber -Force
// update the account using this command to enable or disable the property
Update-AzCosmosDBAccount -EnablePerRegionPerPartitionAutoscale $true -ResourceGroupName "<resource-group-name>" -Name "<cosmos-account-name>"
// Run this command to see the enablement or disablement status:
Get-AzCosmosDBAccount -ResourceGroupName "<resource-group-name>" -Name "<cosmos-account-name>"
在以前的 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 Tmax
到 Tmax
范围内将吞吐量(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/s。
如何对新数据库或容器启用自动缩放?
了解如何启用自动缩放。
是否能在现有的数据库或容器上启用自动缩放?
是的。 还可以在自动缩放与标准(手动)预配吞吐量之间切换。 目前,对于所有 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 脚本 - 转换为自动缩放。
是否可以使用 Azure CLI、PowerShell 或 Azure 资源管理器来管理使用自动缩放功能的数据库或容器?
是的。 若要以编程方式在现有数据库或容器上启用自动缩放,可以使用 Azure CLI 或 PowerShell。
若要使用自动缩放功能创建新的数据库或容器,可以使用 Azure CLI、PowerShell 或 Azure 资源管理器模板。
共享吞吐量数据库是否支持自动缩放?
是的。 若要为共享吞吐量数据库启用自动缩放,请在创建数据库时选择“自动缩放”和“预配吞吐量”选项。
启用自动缩放后,每个共享吞吐量数据库允许多少个容器?
Azure Cosmos DB 在共享吞吐量数据库中强制执行最多 25 个容器。 最大值适用于使用自动缩放或标准 (手动) 吞吐量的数据库。
自动缩放如何影响数据库一致性级别?
自动缩放不会影响数据库的一致性级别。
有关详细信息,请参阅一致性级别。
与每个最大 RU/秒选项关联的存储空间上限是多少?
每个最大 RU/秒的存储限制(以 GB 为单位)是数据库或容器的最大 RU/秒的十分之一。 例如,如果最大 RU/秒为 20000 RU/秒,则该资源可以支持 2000 GB 的存储空间。
有关可用的最大 RU/秒和存储选项,请参阅预配吞吐量自动缩放限制。
如果超过了与最大吞吐量关联的存储空间上限,会发生什么情况?
如果超过了与数据库或容器的最大吞吐量关联的存储空间上限,则 Azure Cosmos DB 会自动将最大吞吐量增加到可支持该级别存储的下一个最大 RU/s。
例如,如果最初的最大 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 Tmax
和 Tmax
之间缩放数据库或容器,直到新的缩放范围(0.1 x Tmax_new
到 Tmax_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 Tmax
到 Tmax
。 无论最大 RU/秒如何,系统始终在 0.1 × Tmax
到 Tmax
之间缩放。
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/s。 使用价值 TTL 的 200 RU/s。 可计费的 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 使用了 6,000 RUs,而 P_2 使用了 8,000 RUs,则标准化利用率为 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/秒。
后续步骤
- 了解如何对 Azure Cosmos DB 数据库或容器启用自动缩放。
- 了解自动缩放预配吞吐量的优势。
- 详细了解逻辑和物理分区。