我们有一个cosmos db容器,用于插入文档(仅追加)。我们看到,即使匹配文档的数量没有变化,同一查询也会消耗大量变化的RU。我可以在Data Explorer中复制。
查询:
result = api.responseText
found = false
number = parseInt(args[0])
for (var i = 0; i < result.length; i++){
if(result[i].playing <= number) {
message.reply("found candidate")
found = true
} else {
if (i == result.length - 1) {
message.reply("no candidate found.")
}
}
}
PartitionKeyPath = / Id
当它在DataExplorer中连续执行时,我得到以下查询统计信息:
请注意RU和索引查找时间的变化(请参阅带有剩余数据的实际屏幕截图)。我们的日志显示相同的查询最多需要7964 RU和20秒!
还请注意,然后,当我删除“ order by”子句时,在连续执行时我会开始获得相同的RU。
每个documentation:cosmos db保证对相同数据的相同查询在重复执行时始终花费相同数量的RU。为什么我们看到这些变化?
答案 0 :(得分:0)
我首先要回答为什么要花这么长时间。原因是您需要添加一个composite index。您应该始终探索添加复合索引以优化ORDER BY查询。它们会产生巨大的影响。
关于我们文档RU部分中的保证,一般指导原则在99%的时间内都是正确的,但我们不能保证。我们将对此进行更简洁的更新。
为什么RU / s不同,根据您共享的查询指标,较便宜的1,878 RU查询的索引查找时间为548毫秒,而较昂贵的4,857 RU查询的索引查找时间为9+。这可能是为什么RU差异如此之大的暗示,但无法确定为什么在操作中没有活动ID的原因。
查询引擎在执行过程中会使用很多启发式方法,在某些情况下,小的更改可能会对查询结果产生重大影响。甚至诸如节流之类的事情都可能将查询拆分为不一致的页数,从而影响RU费用。这很少见,但有可能。