如何获取Azure Cosmos DB各分区使用大小?REST API及Java SDK v4问题咨询
Azure Cosmos DB分区使用大小获取问题解决方案
问题1:REST API调用报错解决
报错原因:Cosmos DB REST API强制要求所有请求必须携带x-ms-version请求头指定API版本,你提交的请求缺少该头导致校验失败。同时你原请求路径中{collection}前有多余空格,也会导致请求异常。
修复步骤:
- 补充
x-ms-version头,当前常用的稳定API版本为2021-06-15 - 若需要接口返回分区使用统计数据,需额外携带
x-ms-documentdb-populatepartitionstatistics: true请求头 - 删除路径中的多余空格
修正后的完整curl命令:
curl -X GET -L \ -H "Content-Type: application/json" \ -H "Authorization: Bearer xxxx" \ -H "x-ms-version: 2021-06-15" \ -H "x-ms-documentdb-populatepartitionstatistics: true" \ https://{account}.documents.azure.com/dbs/{db}/colls/{collection}
请求返回结果中partitionKeyStatistics字段即为各分区的使用统计数据。
问题2:Java Cosmos SDK v4获取分区大小实现
v4版本已重构v2版本的分区统计相关接口,原PartitionKeyStatistics类的功能已整合到com.azure.cosmos.models.PartitionKeyRangeStatistics类中,可通过CosmosContainer的内置方法直接获取,示例代码如下:
import com.azure.cosmos.CosmosContainer; import com.azure.cosmos.models.PartitionKeyRangeStatistics; import java.util.List; // 初始化CosmosClient、获取数据库实例的逻辑省略 CosmosContainer targetContainer = cosmosClient.getDatabase("替换为你的数据库名") .getContainer("替换为你的容器名"); // 获取全部分区的统计信息 List<PartitionKeyRangeStatistics> partitionStats = targetContainer .readAllPartitionKeyRangeStatistics() .getResults(); // 遍历打印各分区数据 for (PartitionKeyRangeStatistics stat : partitionStats) { // 分区唯一ID String rangeId = stat.getPartitionKeyRangeId(); // 分区已使用存储大小,单位为KB long usedStorageKB = stat.getStorageSizeInKB(); System.out.printf("分区ID:%s,已使用存储:%d KB\n", rangeId, usedStorageKB); }
注意:上述两种方式获取的分区统计数据都存在最多15分钟的延迟,仅适用于非实时的存储统计场景。
内容的提问来源于stack exchange,提问作者TA Hyouno
相关产品推荐
相关产品推荐

