我想杀死运行时间超过2小时的慢查询。
我可以在MongoOptions类中使用socket-timeout来杀死spring数据mongo db中的慢速查询吗?
请帮忙。
答案 0 :(得分:1)
套接字超时将从客户端的角度关闭连接,但如果仍在进行中,服务器将继续处理查询(例如,获取一批数据)。
如果您使用的是2.6之前的MongoDB服务器版本,则可以通过db.killOp()
命令终止长时间运行的操作。但是您必须确保要杀死预期的客户端操作而不是内部服务器线程。向长时间运行的查询添加唯一$comment
可能很有帮助,因此可以通过db.currentOp(true)
识别这些查询。
MongoDB 2.6+添加了一个新的maxTimeMS
游标选项,以确保服务器在一定量的累积处理时间(以毫秒为单位)后杀死游标。您需要使用MongoDB Java驱动程序的2.12(或更新版本)(可以使用pom.xml
在<mongodb.driver.version>
中设置)。
有关maxTimeMS
和套接字超时的更多背景信息,请参阅:maxTimeMS() and Query Optimizer Introspection in MongoDB 2.6。