最快的方式获得当前供应的吞吐量在一个帐户中的所有集合?



我想收集有关Cosmos帐户中所有数据库中所有(Mongo API)集合的当前配置吞吐量的信息。这是为了检测与预期基线的任何差异。

对于我的用例,结果需要报告自动伸缩,而不是数据库预置的吞吐量。

下面的工作,但相当慢(我在Azure cloudshell中运行它,在41个数据库中有94个集合的帐户。第一次尝试耗时4分48秒,其中一些结果之间有明显的长时间延迟。第二次尝试快了3分钟,为1分48秒。

第二次尝试对我来说也太慢了。

Set-AzContext -Subscription "..."
$rgName = "..."
$accountName = "..."
Get-AzCosmosDBMongoDBDatabase -ResourceGroupName $rgName -AccountName $accountName | ForEach-Object {$Dbname = $_.Name; Get-AzCosmosDBMongoDBCollection -ResourceGroupName $rgName -AccountName $accountName  -Database  $Dbname | ForEach-Object {$collName = $_.Name; Get-AzCosmosDBMongoDBCollectionThroughput -ResourceGroupName $rgName -AccountName $accountName -DatabaseName $Dbname -Name $collName |  Select-Object -Property Throughput, MinimumThroughput,@{Name = 'DatabaseName'; Expression = {$Dbname}},@{Name = 'CollectionName'; Expression = {$collName}} -ExpandProperty AutoscaleSettings}}

是否有任何方法可以比上述更快地获得所需的结果?

你可以尝试使用Azure管理库的Cosmos DB,但我不能肯定这会更快。这里有一个GitHub上的示例,可以向您展示如何枚举数据库和集合对象,并获得每个对象的吞吐量。

总的来说,这里的挑战是Cosmos中的控制平面操作是由帐户内的主分区提供的,并且它对服务请求的RU/s非常少。事实上,如果您向这个主分区发出太多元数据请求,您可能会得到速率限制并接收429个响应。这花了这么长时间的事实可能是一件好事,因为你没有看到429。