我的API性能持续下降,该性能曾经用于连接到Cosmos db collectionX。
Internet上的大多数建议是您的数据库应具有PartitionKey
,应根据国家/地区,城市等来正确确定。
基于这样的建议,创建了一个单独的db,其集合为'Y',其中partitionkey
为DocumentType
,其值范围从1到30。转换了所有存储过程,查询和代码基于partitionedkey
。
我担心的是,甚至在使用了分区键之后,新分区数据库的吞吐量与早期分区数据库相同,并且在两个cosmos数据库上触发相同的查询时,性能均未发现任何差异。
以下是疑问:
想知道应该为大小为4GB的cosmos db设置的平均吞吐量是多少,并有15个开发人员连续访问它。
即使在对数据库进行分区之后,在两个cosmos db上执行查询或存储过程时,RU的差异也不会很大。
答案 0 :(得分:0)
无法根据存储量或连接数预测理想的RU。您可以check数据库的Cosmos DB指标。
如果您配置的RU较少,查询将花费时间(查询将引发429错误,并且Cosmos SQL-API具有内置重试逻辑。)您可以在Cosmos Connection中增加重试次数。
new RetryOptions() { MaxRetryAttemptsOnThrottledRequests = 30, MaxRetryWaitTimeInSeconds = 30 }
了解Cosmos DB中的逻辑和物理分区。始终尝试避免跨分区查询。
增加RU直接影响成本。通常,我会按照以下做法来优化文档和查询
使文档尺寸尽可能小。
优化查询(通过Azure Portal / Rest-API / SDK检查RU使用情况和时间)
从不运行跨分区查询。
您可以查看this文章以了解其他信息。
答案 1 :(得分:0)
尝试增加分区键的基数,以使您不会遇到比其他分区更容易受到攻击的“热”分区。
此外,请查看是否有可能使用Point Read而不是跨分区甚至单分区查询来减少所用的RU。
有关更多信息,请参见:https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/cosmos-db/request-units.md