我的Cosmos DB在多个容器之间使用共享吞吐量。我已将Cosmos DB手动扩展到70,000 RU / s,目前正在运行大量请求。
天蓝色地看,我可以看到我的部分请求被限制了(返回429)。要给出大约25,000个请求返回200和5k请求返回429的数字的概念。当我遵循azure门户中的警告说我的集合超出了预配置的吞吐量时,它显示平均吞吐量为6.78k RU / s。
我不明白为什么当我的平均吞吐量仅为6,780 RU / s时,当我有70,000 RU / s时,我的请求受到限制。
没有其他容器正在读取或写入,所有这些请求仅针对一个容器发出。由于所有这些请求都将运行存储过程,因此它们都提供了分区键。
最可能的原因是您有一个热分区,该分区在其他分区之前就已达到其分配的吞吐量。
对于水平可伸缩数据库,吞吐量是在物理分区(计算机)之间分配的,并且使用分区键对数据进行分区,该分区键基本上充当将其路由到要存储的特定计算机的地址。
假设我有一个包含三个分区1、2、3和30K RU / s的集合。其中的每一个将获得分配给它的10K RU / s。如果然后运行对分区2进行大量操作并消耗掉全部10K的操作,即使我不触摸分区1或3,也会受到速率限制(429)。
为避免这种情况,您需要选择一个分区键,在写操作时,这两个键都应尽可能均匀地分布数据,并且理想情况下也可以用于回答一个或少量(有界)分区中的查询,从而避免“散开”查询查询必须命中每个分区。
现在,对于仅驻留在单个物理分区上的小型集合,这无关紧要,因为您的数据全部都在单个物理分区上。但是,随着集合的增大,这会导致出现问题,从而导致数据库无法完全扩展。
你可以在这里了解更多
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句