【问题标题】:MongoDB find query maxTimeMSMongoDB查找查询maxTimeMS
【发布时间】:2021-07-19 11:05:44
【问题描述】:

如果查询跨越时间限制,我想终止我的查找查询,所以我使用这样的查询:

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

据此,如果我的 find 查询耗时超过 50 毫秒,那么我想终止此查询。但是我需要了解如果查询超过 5 毫秒,那么在数据库级别会发生什么,然后我的应用程序给了我错误,但在数据库级别,查询仍在运行,或者它也终止,或者它将完成然后终止?

请帮助我理解这一点,如果可能的话,我们如何检查?

【问题讨论】:

    标签: database mongodb mongoose mongodb-query


    【解决方案1】:

    是的,MongoDB 将终止该操作。


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

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

    生成多批次结果的查询会继续返回批次,直到光标超出其分配的时间限制。

    阅读maxTimeMS


    发件人 - https://github.com/Automattic/mongoose/issues/4066#issuecomment-502260563

    https://mongoosejs.com/docs/api/mongoose.html#mongoose_Mongoose-set

    mongoose.set('maxTimeMS', 3000);
    

    或者:

    https://mongoosejs.com/docs/api/connection.html#connection_Connection-set

    const db = mongoose.createConnection(uri);
    
    db.set('maxTimeMS', 3000);
    

    【讨论】:

    • 感谢您的快速回复,是否可以为所有查询(如 maxTimeMS)设置数据库级别超时?
    • 是否有任何工具或命令可以检查区域设置 MongoDB CPU 使用情况?
    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    相关资源
    最近更新 更多