MongoDB慢查询临时开启方法讲解

1、首先连接数据库

bash 复制代码
mongosh "mongodb://localhost:27017"

2、选择目标数据库

bash 复制代码
show databases;#显示所有数据库
use lidb;#使用某数据库

3、查看当前分析级别

bash 复制代码
db.getProfilingStatus()

输出

bash 复制代码
{ was: 0, slowms: 100, sampleRate: 1, ok: 1 }
#was=0表示关闭;was=1表示开启

4、开启慢查询日志(临时,重启失效)

bash 复制代码
#方法一
db.setProfilingLevel(1, { slowms: 100 })  // 记录超过100ms的操作
#方法二
db.setProfilingLevel(1, {
  slowms: 100,
  filter: { op: "query" }  // 只记录查询操作
})

再执行如下命令查看状态:

bash 复制代码
db.getProfilingStatus()

输出

bash 复制代码
{ was: 1, slowms: 100, sampleRate: 1, ok: 1 }

表示设置成功

5、查看慢查询记录

bash 复制代码
#查询超过100ms的慢日志
db.system.profile.find({millis: {$gt: 100}})
// 查看最近的慢查询
db.system.profile.find().sort({ ts: -1 }).limit(5).pretty()
// 分析特定慢查询
db.system.profile.find({
  millis: { $gt: 200 },  // 超过200ms的操作
  op: "query"            // 只查询操作
}).pretty()

6、不同数据库不同设置

bash 复制代码
// 设置db1
use db1
db.setProfilingLevel(1, { slowms: 50 })

// 设置db2
use db2
db.setProfilingLevel(1, { slowms: 200 })

7、修改采样率不改变级别

bash 复制代码
// 保持当前级别,只修改采样率
db.setProfilingLevel(1, { sampleRate: 0.3 })

8、修改慢查询阈值(不改变级别)

bash 复制代码
db.adminCommand({ 
  profile: 0,  // 0=保持当前级别
  slowms: 30   // 新阈值
})

9、全局设置(影响所有数据库)

bash 复制代码
db.adminCommand({ 
  setParameter: 1, 
  slowMS: 50 
})

10、生产环境推荐配置

bash 复制代码
db.setProfilingLevel(1, {
  slowms: 50,
  sampleRate: 0.8
})

11、定期清理分析数据

bash 复制代码
// 清空分析数据
db.system.profile.drop()

// 重建集合
db.createCollection("system.profile", {
  capped: true,
  size: 100 * 1024 * 1024  // 100MB
})

12、永久配置

bash 复制代码
# mongod.conf 添加
operationProfiling:
  mode: slowOp
  slowOpThresholdMs: 100
  slowOpSampleRate: 1.0

13、直接查看日志文件

bash 复制代码
# 查看慢查询日志
tail -f /usr/local/mongodb/logs/log.txt | grep "slow query"

# 过滤耗时超过100ms的操作
grep "ms" /usr/local/mongodb/logs/log.txt | awk -F 'ms' '{if ($1 > 100) print $0}'
相关推荐
Database_Cool_7 分钟前
单库瓶颈解决方案首选:阿里云 PolarDB-X 平滑替代分库分表
数据库·阿里云
2503_9317124820 分钟前
10m/s超高速电梯:西奥XO-NEWIII如何树立行业速度标杆
java·大数据·数据库
无小道23 分钟前
Redis——redis和mysql的数据同步
数据库·redis·mysql
AI的探索之旅27 分钟前
从 Ubuntu 14.04 到 24.04:TI AM335x 开发环境完整迁移与 Agent 接管方案
linux·数据库·嵌入式硬件·ubuntu·postgresql
辰合软件1 小时前
通达OA目录结构与核心文件解析
android·数据库·oracle
名不经传的养虾人1 小时前
从0到1:企业级AI项目迭代日记 Vol.61|记忆不是越多越好,装一道门比装满更重要
数据库·人工智能·ai编程·ai工作流·企业ai
霸道流氓气质2 小时前
Harness Engineering 从理论到实战:基于 Spring AI Alibaba 的完整实现指南
数据库·人工智能·spring·harness
linuxoffer2 小时前
MYSQL回收碎片空间
数据库·mysql
名字还没想好☜2 小时前
Go 并发实战:用 channel 实现 worker pool
java·数据库·后端·golang·go
俭朴的奇异果3 小时前
MongoDB实战开发 【零基础学习,附完整Asp.net示例】
学习·mongodb·asp.net