本文介绍 Azure Cosmos DB 资源的默认配额和限制。 它可帮助你有效地管理作、存储和吞吐量。
存储和数据库操作
在订阅下创建 Azure Cosmos DB 帐户后,可创建数据库、容器和项来管理帐户中的数据。
预配的吞吐量
在容器级别或数据库级别根据 请求单位(RU)或每秒请求单位(RU/秒)分配吞吐量。 下表列出了每个容器/数据库的存储和吞吐量限制。 存储是指数据和索引存储的总和。
资源 | 限制 |
---|---|
每个容器的最大 RU 数(专用吞吐量预配模式) | 1000000 ¹ |
每个数据库的最大 RU 数(共享吞吐量预配模式) | 1000000 ¹ |
每个分区(逻辑和物理分区)的最大 RU 数 | 10,000 |
每个(逻辑)分区的所有项的最大存储 | 20 GB 1 |
不同(逻辑)分区键的最大数目 | 无限制 |
每个容器的最大存储 | 无限制 |
每个帐户的最大附件大小(附件功能即将弃用) | 2 GB |
每 1 GB 需要的最小 RU 数 | 1 RU/秒 |
¹ 通过 提交 Azure 支持票证来增加每个容器或数据库的最大 RU 数。
2 对于其分区键需要更高存储空间或吞吐量上限的工作负荷,若要了解管理此类工作负荷的最佳做法,请参阅创建合成分区键。 如果工作负荷在生产环境中达到 20 GB 的逻辑分区限制,建议使用其他分区键重新构造应用程序作为长期解决方案。 若要让你有时间重新构建应用程序,请请求现有应用程序的逻辑分区键限制暂时增加。 提交 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/秒
- 当前存储空间 (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。 随着时间的推移,存储将增长到 2,000 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。 随着时间的推移,存储将增长到 2,000 GB。 现在,最小最大 RU/s 为 MAX(1000, 2000 * 10 RU/s per GB, 50,000 / 10)
= 20,000 RU/s。
共享吞吐量数据库的最小吞吐量
使用此部分来估计跨容器共享吞吐量的数据库的最小吞吐量。
手动吞吐量
若要估算具有手动吞吐量的共享吞吐量数据库所需的最小 RU/s,请找到以下项的最大值:
- 400 RU/秒
- 当前存储空间 (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/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 Cosmos DB 资源:
- Azure 门户
- Azure PowerShell
- Azure CLI
- Azure 资源管理器 JSON/Bicep 模板
- Azure REST API
- Azure 管理 SDK
- Terraform
- 普鲁米
还可以从应用程序中使用的 Azure Cosmos DB 数据平面 SDK 访问此管理层,以在帐户中创建和管理资源。 在与服务的初始连接期间,数据平面 SDK 还会发出控制平面请求,以执行枚举数据库和容器等作,以及请求帐户密钥进行身份验证。
每个 Azure Cosmos DB 帐户都有一个 主分区 ,其中包含该帐户的所有元数据。 它还具有少量的吞吐量来支持控制平面操作。 创建、读取、更新或删除此元数据的控制平面请求将使用此吞吐量。 当控制平面操作消耗的吞吐量超过此量时,操作将受到速率限制,与 Azure Cosmos DB 中的数据平面操作相同。 但是,与数据作的吞吐量不同,无法增加主分区的吞吐量。
某些控制平面作不使用主分区吞吐量,例如“获取”或“列出密钥”。 但是,与对 Azure Cosmos DB 帐户中的数据发出的请求不同,Azure 中的资源提供程序并非针对高请求量而设计。 如果控制平面操作在连续 5 分钟的时间内在持续级别超过了记录的限制,则可能在 Azure Cosmos DB 资源上遇到请求限制以及失败或不完整的操作。
可以导航到 Azure Cosmos DB 帐户的“见解”选项卡来监视控制平面操作。 有关详细信息,请参阅 “监视控制平面请求”。 可以自定义这些见解,使用 Azure Monitor 并创建工作簿来监视 元数据请求 并设置警报。
资源限制
下表列出了每个订阅或帐户的资源限制。
资源 | 限制 |
---|---|
每个订阅的最大帐户数 | 默认为 250 ¹ |
每个帐户的最大数据库和容器数 | 500 |
帐户支持的元数据操作最大吞吐量 | 240 RU/秒 |
¹ 对 Microsoft 内部客户的默认限制不同。 通过创建最多 1,000 个 Azure 支持请求 来增加这些限制。 Cosmos DB 保留删除任何空数据库帐户的权利,即没有数据库/集合。 } 无法增加此限制。 总计数包括帐户中的数据库和容器(例如,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) 值 | 2,147,483,647 |
¹ 通过创建 Azure 支持请求来增加这些每个容器的限制。
每项的限制
Azure Cosmos DB 项可以表示集合中的文档、表格中的行或图形中的节点或边缘,具体取决于所使用的 API。 下表显示 Azure Cosmos DB 中每项的限制。
资源 | 限制 |
---|---|
项的最大大小 | 2 MB(JSON 表示形式的 UTF-8 长度)1 |
分区键值的最大长度 | 2,048 字节(如果未启用大型分区键,则为 101 字节) |
ID 值的最大长度 | 1,023 字节 |
ID 值允许的字符 | 允许在服务端使用除“/”和“\”之外的所有 Unicode 字符。 警告:但为了获得最佳互操作性,我们强烈建议仅在 ID 值中使用字母数字 ASCII 字符。 某些版本的 Cosmos DB SDK 和连接器(Azure 数据工厂、Spark、Kafka 等)和 HTTP 驱动程序或库存在已知限制。 当 ID 值包含非字母 ASCII 字符时,这些限制可能会阻止成功处理。 因此,若要提高互作性,请对 ID 值进行编码, 例如,通过 Base64 中允许的特殊字符的 Base64 + 自定义编码。 - 如果必须在服务/应用程序中支持非虚拟 ASCII 字符, |
每项的最大属性数 | 无实际限制 |
属性名称的最大长度 | 无实际限制 |
属性值的最大长度 | 无实际限制 |
字符串属性值的最大长度 | 无实际限制 |
数字属性值的最大长度 | IEEE754 双精度 64 位 |
嵌入对象/数组的最大嵌套级别 | 128 |
最大 TTL 值 | 2147483647 |
JSON 中数字的最大精度/范围(用于确保安全的互操作性) | 电气和电子工程师研究所 (IEEE) 754 二进制64 |
1 适用于 MongoDB 的 Azure Cosmos DB仅支持最大 16 MB 的大型文档。 有关详细信息,请参阅 MongoDB 4.2 功能文档。
除了对分区键和 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 分钟 |
¹ 通过 提交 Azure 支持票证来增加它。
自动缩放预配吞吐量限制
有关自动缩放的吞吐量和存储限制的详细说明,请参阅 自动缩放 文章和 常见问题解答 。
资源 | 限制 |
---|---|
系统可以缩放到的最大 RU/秒 |
Tmax ,用户设置的自动缩放最大 RU/秒 |
系统可以缩放到的最小 RU/秒 | 0.1 * Tmax |
系统缩放到的当前 RU/秒 |
0.1*Tmax <= T <= Tmax 根据使用情况 |
每小时最小可计费 RU/秒 | 0.1 * Tmax 按每小时计费,具体取决于系统在一小时内缩放到的最高 RU/秒,或 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)) 向上舍入到最近的 1000 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 |
¹ 可以通过创建 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 分钟 |
Azure 门户中 MongoDB shell 的时间限制 | 24 小时内的 120 分钟 |
¹ 最大为 16 MB 的大型文档需要在 Azure 门户中启用功能。 在 功能文档中了解详细信息。
1.将驱动程序设置中的空闲连接超时设置为 2-3 分钟,因为 Azure LoadBalancer 的默认超时为 4 分钟。 此超时将确保客户端计算机与 Azure Cosmos DB 之间的中间负载均衡器空闲连接不会关闭。
Azure Cosmos DB 免费层帐户的限制
下表列出了 Azure Cosmos DB 免费层帐户的限制。
资源 | 限制 |
---|---|
每个 Azure 订阅的免费层帐户数 | 1 |
免费层折扣持续时间 | 帐户的生存期。 必须在创建帐户期间选择加入。 |
免费层的最大 RU/s | 1000 RU/秒 |
免费层的最大存储量 | 25 GB |
共享吞吐量数据库中的最大容器数 | 25 |
除了上表, 每个帐户的限制 也适用于免费层帐户。 若要了解详细信息,请参阅如何创建 免费层帐户。