gpt4 book ai didi

mongodb - 如何防止巨大的聚合查询使 MongoDB 崩溃?

转载 作者:行者123 更新时间:2023-12-04 18:44:51 26 4
gpt4 key购买 nike

我有一个 MongoDB 实例,有时需要进行以前意想不到的查询。 (这就是无模式的全部意义,对吧?)

其中一些非常复杂,因此需要很长时间。这对我来说很好,但我正在努力解决的是这些查询使 Mongod 服务本身崩溃。

我认为处理这些情况的一种自然方法是简单地超时或拒绝查询,但看起来 Mongod 只是崩溃了(内核用 OOM 错误杀死了 mongod 进程)

这是令人沮丧的,因为这是没有警告的。我知道 MongoDB 将内存管理留给操作系统,所以我很困惑为什么它允许发生这种类型的崩溃。

有没有一种简单的方法来处理这种情况?

最佳答案

当然。 cursor.maxTimeMS()允许您为查询设置超时。如果经过指定的时间,查询将被终止。

从文档

如果关联的游标超过其分配的时间限制,MongoDB 将终止操作。 MongoDB 使用与 db.killOp() 相同的机制终止超过其分配时间限制的操作。 MongoDB 仅在其指定的中断点之一终止操作。

MongoDB 不会将客户端和服务器之间的网络延迟计入游标的时间限制。但是,对于分片集群,MongoDB 确实将 mongos 和 mongod 实例之间的延迟包括在此时间限制内。

生成多批处理结果的查询会继续返回批处理,直到游标超过其分配的时间限制。

用法

db.collection.find({description: /August [0-9]+, 1969/}).maxTimeMS(50)

关于mongodb - 如何防止巨大的聚合查询使 MongoDB 崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52304978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com