Azure Cosmos DB 服务配额

适用对象: NoSQL MongoDB Cassandra Gremlin

本文概述了 Azure Cosmos DB 中提供给不同资源的默认配额。

存储和数据库操作

在订阅下创建 Azure Cosmos DB 帐户后,可创建数据库、容器和项来管理帐户中的数据。

预配的吞吐量

可以按照请求单位(RU/秒或 RU 数)在容器或数据库级别预配吞吐量。 下表列出了每个容器/数据库的存储和吞吐量限制。 存储是指数据和索引存储的总和。

资源 限制
每个容器的最大 RU 数(专用吞吐量预配模式 1000000 ¹
每个数据库的最大 RU 数(共享吞吐量预配模式 1000000 ¹
每个分区(逻辑和物理分区)的最大 RU 数 10,000
每个(逻辑)分区的所有项的最大存储 20 GB ²
不同(逻辑)分区键的最大数目 无限制
每个容器的最大存储 无限制
每个帐户的最大附件大小(附件功能即将弃用) 2 GB
每 1 GB 需要的最小 RU 数 1 RU/秒

1 可以通过提交 Azure 支持票证来增加每个容器或数据库的最大 RU 数。

2 对于其分区键需要更高存储空间或吞吐量上限的工作负荷,若要了解管理此类工作负荷的最佳做法,请参阅创建合成分区键。 如果工作负载已在生产环境中达到 20GB 的逻辑分区限制,建议使用不同的分区键重新构建应用程序,并将其作为长期解决方案。 为了帮助为重新设计应用程序留出时间,可以请求临时增加现有应用程序的逻辑分区键限制。 提交 Azure 支持票证,并选择配额类型“临时增加容器的逻辑分区键大小”。 请求临时增加是一种临时缓解措施,不建议作为长期解决方案,因为“增加限制后不会遵守 SLA 保证”。 若要删除配置,请提交支持票证,并选择配额类型“将容器的逻辑分区键大小还原为默认值(20 GB)”。 提交此支持票证可以在删除数据以满足 20-GB 逻辑分区限制,或者使用不同的分区键重新构建应用程序后完成此操作。

最小吞吐量限制

使用手动吞吐量的 Azure Cosmos DB 容器(或共享吞吐量数据库)的最小吞吐量必须为 400 RU/秒。 随着容器的增长,Azure Cosmos DB 需要一个最小吞吐量,以确保资源(数据库或容器)有足够的资源用于其运行。

可以从 Azure 门户或 SDK 检索容器或数据库的当前和最小吞吐量。 有关详细信息,请参阅分配容器和数据库的吞吐量

实际的最小 RU/s 可能因帐户配置而异。 可以使用 Azure Monitor 指标来查看资源上预配吞吐量 (RU/s) 和存储的历史记录。

容器最小吞吐量

手动吞吐量

若要估算具有手动吞吐量的容器所需的最小 RU/s,请找到以下项的最大值:

  • 400 RU/s
  • 当前存储空间 (GB) * 1 RU/秒
  • 容器上有史以来预配的最高吞吐量/100

例如,你有一个预配了 400 RU/s 和 0 GB 存储的容器。 你将吞吐量提高到 50,000 RU/s,并导入 20 GB 数据。 现在,最小 RU/s 为 MAX(400, 20 * 1 RU/s per GB, 50,000 RU/s / 100) = 500 RU/s。 随着时间的推移,存储会增长到 2000 GB。 现在,最小 RU/s 为 MAX(400, 2000 * 1 RU/s per GB, 50,000 / 100) = 2000 RU/s。

自动缩放吞吐量

若要估算具有自动缩放吞吐量的容器所需的最小自动缩放最大 RU/s,请找到以下项的最大值:

  • 1000 RU/秒
  • 当前存储空间 (GB) * 10 RU/s
  • 在容器上至今预配的最高 RU/s / 10

例如,你有一个预配了 1000 RU/s 和 0 GB 存储的容器。 你将吞吐量提高到 50,000 RU/s,并导入 20 GB 数据。 现在,最小最大 RU/s 为 MAX(1000, 20 * 10 RU/s per GB, 50,000 RU/s / 10) = 5000 RU/s。 随着时间的推移,存储会增长到 2000 GB。 现在,最小最大 RU/s 为 MAX(1000, 2000 * 10 RU/s per GB, 50,000 / 10) = 20,000 RU/s。

共享吞吐量数据库的最小吞吐量

手动吞吐量

若要估算具有手动吞吐量的共享吞吐量数据库所需的最小 RU/s,请找到以下项的最大值:

  • 400 RU/s
  • 当前存储空间 (GB) * 1 RU/秒
  • 数据库上有史以来预配的最高吞吐量/100
  • 400 + MAX(容器计数 - 25, 0) * 100 RU/s

例如,你有一个预配了 400 RU/s、15 GB 存储和 10 个容器的数据库。 最小 RU/s 为 MAX(400, 15 * 1 RU/s per GB, 400 / 100, 400 + 0 ) = 400 RU/s。 如果数据库中有 30 个容器,则最小 RU/s 将为 400 + MAX(30 - 25, 0) * 100 RU/s = 900 RU/s。

自动缩放吞吐量

若要估算具有自动缩放吞吐量的共享吞吐量数据库所需的最小自动缩放最大 RU/s,请找到以下项的最大值:

  • 1000 RU/秒
  • 当前存储空间 (GB) * 10 RU/s
  • 数据库上至今预配的最高 RU/s / 10
  • 1000 + MAX(容器计数 - 25, 0) * 1000 RU/s

例如,你有一个预配了 1000 RU/s、15 GB 存储和 10 个容器的数据库。 自动缩放数据库的最小最大 RU/s 为 MAX(1000, 15 * 10 RU/s per GB, 1000 / 10, 1000 + 0 ) = 1000 RU/s。 如果数据库中有 30 个容器,则最小最大 RU/s 为 1000 + MAX(30 - 25, 0) * 1000 RU/s = 5000 RU/s。

下面汇总了使用预配的吞吐量时的最低预配 RU 限制。

预配类型 资源 限制
手动吞吐量 每个容器的最小 RU 数(使用手动吞吐量的专用吞吐量预配模式 400
手动吞吐量 每个数据库的最小 RU 数(使用手动吞吐量的共享吞吐量预配模式 前 25 个容器为 400 RU/s。
自动缩放吞吐量 每个容器的最小最大 RU 数(使用自动缩放吞吐量的专用吞吐量预配模式 1000
自动缩放吞吐量 每个数据库的最小最大 RU 数(使用自动缩放吞吐量的共享吞吐量预配模式 前 25 个容器为 1000 RU/s。

Azure Cosmos DB 支持通过 SDK 或门户以编程方式缩放每个容器或数据库的吞吐量(RU/秒)。

根据当前的已预配 RU/s 和资源设置,每个资源可以立即以同步方式在最小 RU/s 到最小 RU/s 的 100 倍之间进行缩放。 如果请求的吞吐量值超出范围,将以异步方式执行缩放。 完成异步缩放所需的时间为数分钟到数小时不等,具体取决于请求的吞吐量和容器中的数据存储大小。 了解详细信息。

无服务器

无服务器可让你以基于消耗的方式使用 Azure Cosmos DB 资源。 下表列出了每个容器/数据库的存储和吞吐量可突发性限制。 这些限制无法提高。 建议为更多存储需求分配额外的无服务器帐户。

资源 限制
每个容器的最大 RU/秒 20,000*
每个(逻辑)分区的所有项的最大存储 20 GB
每个容器的最大存储 1 TB

*最大 RU/秒可用性取决于容器中存储的数据。 请参阅无服务器性能

控制面板

Azure Cosmos DB 维护着一个资源提供程序,该程序提供了一个管理层来创建、更新和删除 Azure Cosmos DB 账户中的资源。 资源提供程序与整个 Azure 资源管理层(即 Azure 的部署和管理服务)进行交互。 可以使用 Azure 门户、Azure PowerShell、Azure CLI、Azure 资源管理器和 Bicep 模板、Rest API、Azure 管理 SDK 以及第三方工具(如 Terraform 和 Pulumi)创建和管理 Azure Cosmos DB 资源

还可以从应用程序中使用的 Azure Cosmos DB 数据平面 SDK 访问此管理层,以在帐户中创建和管理资源。 数据平面 SDK 还可在与服务的初始连接期间发出控制平面请求,以执行枚举数据库和容器以及请求帐户密钥进行身份验证等操作。

Azure Cosmos DB 的每个帐户都有一个 master partition,它包含帐户的所有元数据。 它还具有少量的吞吐量来支持控制平面操作。 创建、读取、更新或删除此元数据的控制平面请求会消耗此吞吐量。 当控制平面操作消耗的吞吐量超过此量时,操作将受到速率限制,与 Azure Cosmos DB 中的数据平面操作相同。 但是,与数据操作的吞吐量不同的是,主分区的吞吐量不能增加。

某些控制平面操作不消耗主分区吞吐量,如获取或列出密钥。 但是,与 Azure Cosmos DB 帐户中的数据请求不同,Azure 中的资源提供程序不是针对高请求量设计的。 如果控制平面操作在连续 5 分钟的时间内在持续级别超过了记录的限制,则可能在 Azure Cosmos DB 资源上遇到请求限制以及失败或不完整的操作

可以导航到 Azure Cosmos DB 帐户的“见解”选项卡来监视控制平面操作。 若要了解详细信息,请参阅监视控制平面请求。 用户还可以对它们进行自定义,使用 Azure Monitor 并创建工作簿来监视元数据请求并对其设置警报。

资源限制

下表列出了每个订阅或帐户的资源限制。

资源 限制
每个订阅的最大帐户数 默认值为 50。 ¹
每个帐户的最大数据库和容器数 500 ²
帐户支持的元数据操作最大吞吐量 240 RU/秒

¹ 可以通过创建 Azure 支持请求来提高这些上限,最多可以提高到 1000。² 此限制无法增加。 具有帐户的两者的总数。 (1 个数据库和 499 个容器、250 个数据库和 250 个容器等)

请求限制

下表列出了每个帐户每 5 分钟间隔的请求限制,除非另有指定。

操作 限制
最大列出或获取密钥数 500 ¹
最大创建数据库和容器 500
最大获取或列出数据库和容器 500 ¹
最大更新预配吞吐量 25
最大区域故障转移数 10(每小时)²
上面未定义的所有操作 (PUT、POST、PATCH、DELETE、GET) 的最大数目 500

¹ 用户应对 SDK 实例使用单一实例客户端,并在该实例的生存期内在请求之间缓存密钥、数据库和容器引用。 2 区域故障转移仅适用于单个区域写入帐户。 多区域写入帐户不需要也不允许更改写入区域。

Azure Cosmos DB 会定期自动备份数据。 有关备份保留时间间隔和窗口的详细信息,请参阅 Azure Cosmos DB 中的联机备份和按需数据还原

每个帐户的限制

下面是每个帐户的限制列表。

预配的吞吐量

资源 限制
每个帐户最大数据库和容器数 500¹
具有共享吞吐量的每个数据库的最大容器数 25
最大区域数 无限制(所有 Azure 区域)

无服务器

资源 限制
每个帐户最大数据库和容器数 500
最大区域数 1(任何 Azure 区域)

每个容器的限制

根据使用的 API,Azure Cosmos DB 容器可以表示集合、表或图形。 容器支持唯一键约束存储过程、触发器和 UDF索引策略的配置。 下表列出了特定于容器中的配置的限制。

资源 限制
数据库或容器名称的最大长度 255
每个容器的最大存储过程数 100 ¹
每个容器的最大 UDF 数 50 ¹
每个容器的最大唯一键数 10 ¹
每个唯一键约束的最大路径数 16 ¹
最大 TTL 值 2147483647

1 可以通过创建 Azure 支持请求来提高每个容器的上限。

每项的限制

根据使用的 API,Azure Cosmos DB 项可以表示集合中的一个文件、表中的一行或图形中的一个节点/边缘。 下表显示 Azure Cosmos DB 中每项的限制。

资源 限制
项的最大大小 2 MB(JSON 表示形式的 UTF-8 长度)1
分区键值的最大长度 2048 字节(如果未启用大分区键,则为 101 字节)
ID 值的最大长度 1023 个字节
ID 值允许的字符 允许在服务端使用除“/”和“\”之外的所有 Unicode 字符。
警告:但为了获得最佳互操作性,我们强烈建议仅在 ID 值中使用字母数字 ASCII 字符。
在某些版本的 Cosmos DB SDK 以及连接器(ADF、Spark、Kafka 等)和 http 驱动程序/库等中存在一些已知限制,当 ID 值包含非字母数字 ASCII 字符时,这些限制可能会阻止成功处理。 因此,为了提高互操作性,请对 ID 值进行编码 - 例如,通过 Base64 以及 Base64 中允许的特殊字符的自定义编码。 - 如果必须在服务/应用程序中支持非字母数字 ASCII 字符。
每项的最大属性数 无实际限制
属性名称的最大长度 无实际限制
属性值的最大长度 无实际限制
字符串属性值的最大长度 无实际限制
数字属性值的最大长度 IEEE754 双精度 64 位
嵌入对象/数组的最大嵌套级别 128
最大 TTL 值 2147483647
JSON 中数字的最大精度/范围(用于确保安全的互操作性) IEEE 754 binary64

1 适用于 MongoDB 的 Azure Cosmos DB仅支持最大 16 MB 的大型文档。 若要了解详细信息,请阅读功能文档

除了对分区键和 ID 值的长度限制以及 2 MB 的总大小限制外,对项负载(如属性数量和嵌套深度)没有任何限制。 可能需要为具有大型或复杂项结构的容器配置索引策略,以减少 RU 消耗。 若要查看实际示例以及用于管理大型项的模式,请参阅为 Azure Cosmos DB 中的项建模

每个请求限制

Azure Cosmos DB 支持对容器、项和数据库等资源执行 CRUD 和查询操作。 它还支持对容器中具有相同分区键的项发出事务性批量处理请求

资源 限制
单个操作(例如存储过程执行或单个查询页检索)的最长执行时间 5 秒
最大请求大小(例如,存储过程、CRUD) 2 MB
最大响应大小(例如分页查询) 4 MB
事务性批处理中的最大操作数 100

Azure Cosmos DB 支持在写入过程中执行触发器。 对于每个写入操作,该服务最多支持一个预先触发器和一个后期触发器。

一旦查询之类的操作达到执行超时或响应大小限制,它会向客户端返回结果页和继续标记,以继续执行操作。 单个查询可跨页面/继续符运行的持续时间没有实际限制。

Azure Cosmos DB 使用 HMAC 进行授权。 可以使用主密钥或资源令牌对资源进行精细的访问控制。 这些资源可以包括容器、分区键或项。 下表列出了 Azure Cosmos DB 中的授权令牌限制。

资源 限制
主令牌最长过期时间 15 分钟
资源令牌最短过期时间 10 分钟
资源令牌最长过期时间 默认为 24 小时 1
令牌授权的最大时钟偏差 15 分钟

1 可以通过填写 Azure 支持票证增加此值

自动缩放预配吞吐量限制

有关自动缩放吞吐量和存储限制的更多详细说明,请参阅自动缩放文章和常见问题解答

资源 限制
系统可以缩放到的最大 RU/秒 Tmax,用户设置的自动缩放最大 RU/秒
系统可以缩放到的最小 RU/秒 0.1 * Tmax
系统缩放到的当前 RU/秒 0.1*Tmax <= T <= Tmax根据使用情况
每小时最小可计费 RU/秒 0.1 * Tmax

计费以小时为单位,在这种情况下,将按系统在一小时内缩放到的最高 RU/s 或 0.1*Tmax 计费,以较大者为准。
容器的最小自动缩放最大 RU/秒 MAX(1000, highest max RU/s ever provisioned / 10, current storage in GB * 10),向上舍入为最接近的 1000 RU/秒
数据库的最小自动缩放最大 RU/秒 MAX(1000, highest max RU/s ever provisioned / 10, current storage in GB * 10, 1000 + (MAX(Container count - 25, 0) * 1000)),向上舍入为最接近的 1,000 RU/秒。

请注意,如果数据库有 25 个以上的容器,每增加一个容器,系统会将最小自动缩放最大 RU/秒增加 1000 RU/秒。 例如,如果有 30 个容器,则可以设置的最低自动缩放最大 RU/秒为 6000 RU/秒(缩放范围是 600 - 6000 RU/秒)。

SQL 查询限制

Azure Cosmos DB 支持使用 SQL 查询各项。 下表描述了查询语句的限制,例如子句数目或查询长度方面的限制。

资源 限制
最大 SQL 查询长度 512 KB
每个查询的最大 JOIN 数 10 ¹
每个查询的最大 UDF 数 10 ¹
每个多边形的最大点数 4096
每个容器的最大显式包含路径数 1500 ¹
每个容器的最大显式排除路径数 1500 ¹
组合索引中的最大属性数 8
组合索引中的最大路径数 100

1 可以通过创建 Azure 支持请求来增加上述任一 SQL 查询限制。

特定于适用于 MongoDB 的 API 的限制

Azure Cosmos DB 支持为针对 MongoDB 编写的应用程序使用 MongoDB 线路协议。 可以在支持的 MongoDB 功能和语法中找到支持的命令和协议版本。

下表列出了特定于 MongoDB 功能支持的限制。 适用于 NoSQL 的API 提到的其他服务限制也适用于适合 MongoDB 的 API。

资源 限制
文档的大小上限 16 MB(JSON 表示形式的 UTF-8 长度)¹
最大 MongoDB 查询内存大小(此限制仅适用于 3.2 服务器版本) 40 MB
MongoDB 操作的最长执行时间(适用于 3.2 服务器版本) 15 秒
MongoDB 操作的最长执行时间(适用于 3.6 和 4.0 服务器版本) 60 秒
索引定义上嵌入对象/数组的最大嵌套级别 6
服务器端连接关闭的空闲连接超时 ² 30 分钟

¹ 最大为 16 MB 的大型文档需要在 Azure 门户中启用功能。 若要了解详细信息,请阅读功能文档

² 建议客户端应用程序将驱动程序设置中的空闲连接超时设置为 2-3 分钟,因为 Azure LoadBalancer 的默认超时为 4 分钟。 此超时将确保客户端计算机与 Azure Cosmos DB 之间的中间负载均衡器空闲连接不会关闭。

Azure Cosmos DB 支持在写入过程中执行触发器。 对于每个写入操作,该服务最多支持一个预先触发器和一个后期触发器。

元数据请求限制

Azure Cosmos DB 为每个帐户维护系统元数据。 此元数据可用于免费枚举集合、数据库、其他 Azure Cosmos DB 资源及其配置。

资源 限制
试用持续时间 30 天(过期后可以请求重新试用)
过期后,存储的信息将被删除。
每个订阅的最大容器数(NoSQL、Gremlin、适用于表的 API ) 1
每个订阅的最大容器数 (适用于 MongoDB 的 API) 3
每个容器的最大吞吐量 5000
每个共享吞吐量数据库的最大吞吐量 20000
每个帐户的最大总存储量 10 GB

Azure Cosmos DB 免费层帐户的限制

下表列出了 Azure Cosmos DB 免费层帐户的限制。

资源 限制
每个 Azure 订阅的免费层帐户数 1
免费层折扣持续时间 帐户的生存期。 必须在创建帐户期间选择加入。
免费层的最大 RU/s 1000 RU/秒
免费层的最大存储量 25 GB
最大共享吞吐量数据库数 5
共享吞吐量数据库中的最大容器数 25
在免费层帐户中,最多包含 25 个容器的共享吞吐量数据库的最小 RU/s 为 400 RU/s。

除了之前的表格之外,每个帐户的限制也适用于免费层级帐户。 要了解详细信息,请参阅如何创建免费层帐户

后续步骤