如何获取Cosmos DB集合中每个分区的大小?
获取Cosmos DB集合所有分区大小的方法
当然可以获取Cosmos DB集合中所有分区的大小!Azure门户的Metrics面板只展示前几个大分区确实有点局限,下面我给你几种可靠的方法来拿到全部分区的存储数据:
方法1:使用Azure CLI
这是最快捷的命令行方式,直接调用Cosmos DB的管理接口就能拿到所有分区的统计信息。打开终端执行以下命令(替换掉尖括号里的参数):
az cosmosdb sql container show-partition-key-stats --account-name <你的Cosmos DB账户名> --resource-group <资源组名> --database-name <数据库名> --name <集合名>
返回的结果里会包含每个分区键对应的sizeKb(单位KB),清晰列出所有分区的大小。
方法2:使用PowerShell
如果你习惯用PowerShell管理Azure资源,这个命令同样能满足需求:
Get-AzCosmosDBSqlContainerPartitionKeyStatistics -ResourceGroupName <资源组名> -AccountName <账户名> -DatabaseName <数据库名> -ContainerName <集合名>
执行后会输出每个分区的详细统计,包括分区键值、存储大小等关键数据。
方法3:通过Cosmos DB SDK编程获取
如果需要在应用中集成分区大小的查询逻辑,用官方SDK是最佳选择。这里以.NET SDK为例,给你一段简单的代码示例:
using Microsoft.Azure.Cosmos; var cosmosClient = new CosmosClient("<你的连接字符串>"); var container = cosmosClient.GetContainer("<数据库名>", "<集合名>"); var partitionKeyStats = await container.GetPartitionKeyStatisticsAsync(); foreach (var stat in partitionKeyStats) { Console.WriteLine($"分区键: {stat.PartitionKey}, 存储大小: {stat.SizeInKB} KB"); }
Python、Java等其他语言的SDK也提供了类似的getPartitionKeyStatistics接口,逻辑基本一致,你可以根据自己的技术栈调整。
方法4:使用Azure Monitor日志查询
如果你的Cosmos DB已经配置了日志收集到Log Analytics,还可以通过Kusto查询来获取分区大小,甚至能查看历史变化趋势:
AzureDiagnostics | where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyStatistics" | where databaseName_s == "<数据库名>" and collectionName_s == "<集合名>" | project partitionKey_s, sizeKb_d, timestamp | order by timestamp desc
这个方法适合需要长期监控分区大小变化的场景。
内容的提问来源于stack exchange,提问作者Randy Minder
相关产品推荐
相关产品推荐

