为什么零结果Cosmos DB查询如此昂贵?

姆潘尼奇

我正在调查为什么我们在Cosmos中耗尽了这么多RU。我们的写入量是RU的预期数量,但我们的读取量却很高-比我们的写入量大。我试图将其剥离到最简单的情况。在没有结果的分区上查询单个请求将占用2000 RU。为什么这么贵?

var query = new QueryDefinition("SELECT * FROM c WHERE c.partitionKey = @partionKey ORDER BY c._ts ASC, c.id ASC")
                    .WithParameter("@partionKey", id.Value)

using var queryResultSetIterator = container.GetItemQueryIterator<MyType>(query,
                requestOptions: new QueryRequestOptions
                {
                    PartitionKey = new PartitionKey(id.Value.ToString()),
                });

while (queryResultSetIterator.HasMoreResults)
            {
                foreach (var response in await queryResultSetIterator.ReadNextAsync())
                {
                    yield return response.Data;
                }
            }

集合的分区键为/partitionKeyRU容量直接在容器上设置,不共享。我们有一个匹配where子句的复合索引-_ts asc,id asc。尽管我不确定这对不返回记录有何影响。

不幸的是,当以这种方式查询时,SDK似乎并没有为您提供用过的RU,因此我一直在使用Azure监视器来观察RU的使用情况。

有谁能阐明为什么此查询返回零条记录并限制为单个分区需要2k RU?

更新:

我只是在同一存储帐户中数据库的另一个实例上运行了此查询。两者的配置相同。DB1中有0MB,DB2中有44MB。对于不返回记录的完全相同的操作,DB1使用111 RU,DB2使用4730RU-对于相同的无结果查询,其使用量是原来的40倍以上。

添加更多细节:一致性设置为一致前缀。这是单个区域。

另一个更新:

我已经复制了仅通过Azure门户查询的问题,它与容器中的记录数有关。查看查询统计信息,就好像它正在加载容器中的每个文档以搜索分区键一样。分区键不是最高效的搜索方式吗?Cosmos是否不确切地知道在哪里可以找到属于分区键的文档?

2445.38的RU
显示结果
0 - 0
检索的文档数:65671检索到的文档尺寸:294343656字节
输出文档计数:0
输出文件大小:147字节的索引命中文档计数:0
索引查找时间:0毫秒
文献加载时间:8804.060000000001毫秒
查询引擎执行时间:133.11 ms
系统功能执行时间:0 ms
用户定义功能执行时间:0 ms
文档写入时间:0 ms

姆潘尼奇

我最终找到问题的根源。为了搜索分区键,需要对其进行索引。考虑到使用分区键来决定文档的存储位置,这使我感到奇怪,因此您可能认为Cosmos会固有地知道每个分区键的位置。

在索引项目列表中包含分区键解决了我的问题。这也解释了为什么随着数据库规模的增加,性能会随着时间的推移而下降-它正在扫描每个文档。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么高速缓存如此昂贵?

来自分类Dev

为什么Math.max在Java中如此昂贵?

来自分类Dev

为什么Haskell(GHC)中的多态性如此昂贵?

来自分类Dev

查询项和过滤器项在完全匹配时返回零结果,但是查询匹配返回结果。为什么?

来自分类Dev

为什么此查询从Firestore返回零

来自分类Dev

是什么让没有缓冲区的文件读取如此昂贵?

来自分类Dev

为什么此LINQ可查询分页性能如此差?

来自分类Dev

为什么添加INNER JOIN会使此查询如此缓慢?

来自分类Dev

为什么此功能允许SQL查询如此复杂?

来自分类Dev

为什么我的共同朋友查询如此缓慢?

来自分类Dev

这是否说明了为什么 Postgres 查询如此缓慢

来自分类Dev

为什么输出的结果不应该如此?

来自分类Dev

Azure Cosmos DB查询

来自分类Dev

为什么我的查询没有结果?

来自分类Dev

为什么此查询不返回结果?

来自分类Dev

<>或NOT IN,以及查询为什么返回错误结果

来自分类Dev

为什么0的“何处不在”查询结果

来自分类Dev

为什么我的查询返回的结果很多?

来自分类Dev

为什么不显示查询结果?

来自分类Dev

为什么此查询重复结果?

来自分类Dev

为什么mysql查询返回不同的结果?

来自分类Dev

为什么此查询不返回结果?

来自分类Dev

为什么我的搜索查询结果不佳?

来自分类Dev

为什么无法得到查询结果

来自分类Dev

Cosmos DB - 查询异构集合?

来自分类Dev

Cassandra DB:为什么少于查询失败?

来自分类Dev

Cassandra DB:为什么少于查询失败?

来自分类Dev

Elasticsearch查询返回零结果

来自分类Dev

指定分区键时,为什么Azure Cosmos查询具有较高的RU?

Related 相关文章

热门标签

归档