Azure Cosmos FeedIterator大Offset查询内存占用过高问题问询
关于Azure Cosmos DB大偏移量查询内存占用的疑问
我在查询一张包含35万条记录的Azure Cosmos表,查询逻辑是获取时间戳大于-62135596800的全表数据,再跳过399000条记录,预期返回空结果。查询耗时约16秒可以接受,但运行期间内存占用高达1GB。
我知道这种用法可能不符合Cosmos的设计初衷,但想确认这种高内存占用是预期行为还是Bug?
生成的SQL查询语句如下:
SELECT VALUE root FROM root WHERE (((root["ObjectType"] = "dummytype") AND (root["Context"] = null)) AND (root["timestamp"] > -62135596800)) ORDER BY root["timestamp"] ASC OFFSET 399000 LIMIT 1000
查询执行期间的内存使用情况:偏移量为399000时,内存随查询进程持续上升,即便多次触发GC,占用仍未明显回落(对应图表显示内存逐步攀升至1GB左右)。
我使用的是最新版本的Microsoft.Azure.Cosmos(3.31.2)。由于该查询本应仅跳过所有记录并返回空结果,我预期内存占用会低得多。
如下表所示,内存使用量随查询偏移量增大呈线性增长:
| 偏移量 | 内存占用 |
|---|---|
| 0 | 25MB |
| 99000 | 390MB |
| 199000 | 618MB |
| 299000 | 859MB |
| 399000 | 1005MB |
内存使用量随迭代器需遍历的记录数增加而增长是否属于预期行为?我原本以为它会分批加载表数据,已遍历的片段会被垃圾回收,但从内存变化来看并非如此。
内容的提问来源于stack exchange,提问作者remagg
相关产品推荐
相关产品推荐

