1. 慢查询介绍 MongoDB 数据库的慢查询功能(Profiling)有三个级别: 0:代表关闭,不收集任何慢查询 1:收集慢查询数据,默认收集超过100毫秒的慢查询 2:收集任何操作记录数据 2. 慢查询管理 2.1 检查慢查询是否开启 MongoDB 数据库的慢查询数据是存放在一个数据库集合中(system.profile),这个和 MySQL 数据库是有区别的,如果你不主动创建system.profile这个集合,那这个集合就固定1M大小,当慢查询记录超过1M,就会将历史数据覆盖,循环使用,所以在这里需要根据业务实际情况设置集合大小。 db.getProfilingLevel() 返回结果是0代表 MongoDB 数据库没有开启慢查询功能 2.2 开启慢查询功能 指定阈值慢查询 ,超过1000毫秒的查询被记录 db.setProfilingLevel(1, { slowms: 1000 }) 2.3 将慢查询的级别设置为2 db.setProfilingLevel(2) { "was" : 1, "slowms" : 500, "sampleRate" : 1, "ok" : 1 } db.getProfilingStatus() { "was" : 2, "slowms" : 500 "sampleRate" : 1 }

2.4 关掉慢查询功能 db.setProfilingLevel(0) 2.5 查询慢查询级别和其它信息 db.getProfilingStatus() 2.6 仅查询慢查询级别 db.getProfilingLevel() 2.7 慢日志查询 查询最近的10个慢查询日志 db.system.profile.find({"millis":{$gte:8000}}).limit(50).sort( { ts : -1 } ).pretty() 2.8 查询低于100毫秒的日志 db.system.profile.find( { millis : { $gt : 100 } } ).pretty() 2.9 查询时间从 2021-08-25 3点整到 2021-09-17 3点40分之间的日志 db.system.profile.find({ ts : { $gt: new ISODate("2021-08-25T03:00:00Z"), $lt: new ISODate("2021-09-17T03:40:00Z") } }).pretty()