如何强制执行 cosmosDB RU 吞吐量

How is cosmosDB RU throughput enforced

我有一个 cosmosGB gremlin API 设置了 400 RU/s。如果我必须 运行 一个需要 800 个 RU 的查询,是否意味着这个查询需要 2 秒才能执行?如果我将吞吐量增加到 1600 RU/s,这个查询会在半秒​​内执行吗?通过使用 RU,我没有发现查询性能有任何显着变化。

单次查询需要支付给定金额 request units,因此“查询需要 800 RU/s”的说法不太准确。一个 1KB 的文档读取是 1 RU,写入更昂贵,每个 10 RU 左右。一般来说,您应该避免任何单独超过 50 的请求,这可能很高。以我的经验,我尽量保持每个操作的单独费用尽可能低,对于大型列表查询通常在 20-30 以下。

结果是400/s 至少完成1 个查询绰绰有余。当您在 Cosmos 告诉您等待一段时间再被允许再次成功的时间跨度内进行多次尝试时,会出现超限。这是动态的并且基于或多或少的黑盒公式。不一定是简单的按费用划分额度,没有一个人的要求会根据额度快慢。

您可以通过检查响应或通过检查 Azure 仪表板指标来监控您是否受到限制。

正如我在另一个不同但有些相关的答案 中所解释的那样,请求单位是按秒分配的。如果给定查询的成本超过该一秒内可用的请求单位数 window:

  • 查询将被执行
  • 您现在将因请求单位超额而陷入“债务”
  • 在还清“债务”之前,您将受到限制

假设您有 400 RU/sec,并且您执行的查询花费了 800 RU。它会完成,但随后您将欠债大约 2 秒(每秒 400 RU,乘以两秒)。至此,你就不会再被节流了。

查询的执行速度与分配的 RU 数无关。无论您有 1,000 RU/second 还是 100,000 RU/second,查询都会 运行 在相同的时间内(除了任何限制时间阻止查询最初 运行ning ).因此,除了限制之外,您的 800 RU 查询将 运行 始终如一,无论 RU 数量如何。