我正在尝试测试一些关于运行缓慢的查询的理论 - 因此我希望我的查询运行缓慢。因此,我在我的收藏中省略了索引。当我运行db.mycollection.find({myfield: /.abc./}).sort({myfield2: 1}, {allowDiskUse: true})方法时,我收到以下错误...
Error: error: {
"ok" : 0,
"errmsg" : "Executor error during find command: OperationFailed: Sort operation used more than the maximum 33554432 bytes of RAM. Add an index, or specify a smaller limit.",
"code" : 96,
"codeName" : "OperationFailed"
}
Run Code Online (Sandbox Code Playgroud)
好的。我想继续在磁盘上排序,但似乎聚合框架命令“allowDiskUse:”对 find() 方法没有执行任何操作。我收到同样的错误。
“allowDiskUse”在与 find() 一起使用时有效,还是仅在与聚合框架一起使用时有效?
我似乎找不到任何说明它是特定于框架的文档,但话又说回来,它似乎不适用于 find()。也许这是一个宽松的答案。我想我正在寻求更具体的答案。
在 MongoDB 4.4 版本中添加了此功能:cursor.allowDiskUse()
allowDiskUse()具有以下形式:
db.collection.find(<match>).sort(<sort>).allowDiskUse()
Run Code Online (Sandbox Code Playgroud)
“allowDiskUse”在与 find() 一起使用时有效,还是仅在与聚合框架一起使用时有效?
该allowDiskUse选项特定于聚合框架。
排序操作使用的 RAM 超过最大 33554432 字节。
您可以sort()从find()查询中删除以避免达到内存中排序限制。
我希望我的查询运行缓慢。
虽然这不是典型的目标,但可以使用以下一些选项来减慢此查询:
用于强制hint()进行集合扫描或非最佳索引选择(但排序限制仍然适用)
使您的正则表达式查询不区分大小写:{myfield: /abc/i}
mongod限制可用于使用cgroups虚拟机的资源。有限的 RAM(您的工作集明显大于 RAM)和缓慢的磁盘可能会导致查询缓慢。
| 归档时间: |
|
| 查看次数: |
11229 次 |
| 最近记录: |