Cosmos DB性能问题(即RU费用,吞吐量,Http 429)

时间:2019-05-06 15:45:21

标签: performance azure-cosmosdb issue-tracking

  1. 我的API性能持续下降,该性能曾经用于连接到Cosmos db collectionX。

  2. Internet上的大多数建议是您的数据库应具有PartitionKey,应根据国家/地区,城市等来正确确定。

  3. 基于这样的建议,创建了一个单独的db,其集合为'Y',其中partitionkeyDocumentType,其值范围从1到30。转换了所有存储过程,查询和代码基于partitionedkey

  4. 我担心的是,甚至在使用了分区键之后,新分区数据库的吞吐量与早期分区数据库相同,并且在两个cosmos数据库上触发相同的查询时,性能均未发现任何差异。

以下是疑问:

  1. 想知道应该为大小为4GB的cosmos db设置的平均吞吐量是多少,并有15个开发人员连续访问它。

  2. 即使在对数据库进行分区之后,在两个cosmos db上执行查询或存储过程时,RU的差异也不会很大。

2 个答案:

答案 0 :(得分:0)

无法根据存储量或连接数预测理想的RU。您可以check数据库的Cosmos DB指标。

如果您配置的RU较少,查询将花费时间(查询将引发429错误,并且Cosmos SQL-API具有内置重试逻辑。)您可以在Cosmos Connection中增加重试次数。

new RetryOptions() { MaxRetryAttemptsOnThrottledRequests = 30, MaxRetryWaitTimeInSeconds = 30  }

了解Cosmos DB中的逻辑和物理分区。始终尝试避免跨分区查询。

增加RU直接影响成本。通常,我会按照以下做法来优化文档和查询

  1. 使文档尺寸尽可能小。

  2. 优化查询(通过Azure Portal / Rest-API / SDK检查RU使用情况和时间)

  3. 从不运行跨分区查询。

您可以查看this文章以了解其他信息。

答案 1 :(得分:0)

尝试增加分区键的基数,以使您不会遇到比其他分区更容易受到攻击的“热”分区。

此外,请查看是否有可能使用Point Read而不是跨分区甚至单分区查询来减少所用的RU。

有关更多信息,请参见:https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/cosmos-db/request-units.md