【Mongo】MongoDB-Profiler

本文介绍了MongoDB Profiler的功能及使用方法,包括如何通过配置文件和shell命令设置Profiling级别,以及如何查看Profiler收集的数据。

MongoDB Profiler能够收集MongoDB操作的操作信息,尤其是分析慢操作时的利器。MongoDB Profiler将收集到的数据存到system.profile集合中,它是一个capped collection(固定大小的集合)。

Profiling Levels

设置Profiler的级别有以下几个选项:

  • 0:设置为off,这是默认级别,即关闭profiler。但是mongod始终将执行时间超过slowOpThresholdMs参数值的操作记录到log中。
  • 1:收集慢操作的信息。默认操作超过100ms即 为慢操作,这个时间可以设置。
    -2:收集所有操作的信息。

开启Profiling,设置级别

可以通过配置文件、shell命令、驱动等方式设置,这里介绍配置文件和shell命令方式。

配置文件设置

这里写图片描述

  • operationProfiling.slowOpThresholdMs
    Type:integer
    Default:100

这个参数设置慢操作的阈值,时间为ms,默认100ms。MongoDB始终记录慢操作到日志中,哪怕profiler关闭。如果profiler是on状态,那么就将
慢操作信息写入system.profile集合。

  • operationProfiling.mode
    Type: string
    Default: off

profiling级别设置:
这里写图片描述
operationProfiling.mode的设置只对mongod有效。

官方说明profiling不同的级别对性能的影响不同,建议慎重考虑。
Database profiling can impact database performance. Enable this option only after careful consideration.

shell Command

db.setProfilingLevel(level, slowms)
可以通过该命令设置级别和慢操作阈值。
注意,这个命令不能在mongos是执行,会报如下错误,需要在mongod节点上执行:
这里写图片描述
这里写图片描述

查看Profiler数据

当我设置了profile级别后,在test库中有一个system.profile集合,可以查看这个库中的数据,字段含义参考官方文档:https://docs.mongodb.com/manual/reference/database-profiler/

参考

https://docs.mongodb.com/manual/tutorial/manage-the-database-profiler/#database-profiling-specify-slowms-threshold

https://docs.mongodb.com/manual/reference/command/profile/

https://docs.mongodb.com/manual/reference/configuration-options/

你遇到的错误: ``` Package 'mongodb' is not installed, so not removed Package 'mongodb-clients' is not installed, so not removed You might want to run 'apt --fix-broken install' to correct these. The following packages have unmet dependencies: mongodb-org-database : Depends: mongodb-org-server but it is not going to be installed Depends: mongodb-org-mongos but it is not going to be installed mongodb-org-tools : Depends: mongodb-database-tools but it is not going to be installed E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution). ``` --- ## 🔍 问题分析 你现在处于一个 **“半安装、半断裂”** 的状态。说明: - 你之前尝试安装 `mongodb-org`,但因文件冲突失败。 - APT 开始解包部分组件(如 `mongodb-org-database`, `mongodb-org-tools`),但未完成配置。 - 现在这些“已下载但未配置”的包依赖其他未能安装的包(如 `mongodb-org-server`),导致依赖断裂。 - 当前系统认为这些包“已安装”,但实际上它们不完整。 > ⚠️ 虽然你想移除旧包,但其实它们早已被删除了(所以提示“not installed”),真正的问题是 **残留的官方 MongoDB 包处于“损坏状态”**。 --- ## ✅ 解决方案:强制修复 + 清理 + 重装 你需要先修复依赖关系,清除所有残余的 MongoDB 官方包,然后再干净地重新安装。 ### ✅ 步骤 1:尝试自动修复依赖(关键第一步) ```bash sudo apt --fix-broken install ``` 这个命令会尝试: - 配置尚未完成的包 - 或提示删除损坏的包 👉 如果它问你是否要移除某些包,输入 `Y` 确认。 --- ### ✅ 步骤 2:强制删除所有 MongoDB 相关包(包括残余) 运行以下命令查看当前系统中所有与 `mongodb` 或 `mongo` 相关的已安装包: ```bash dpkg -l | grep -i mongo ``` 输出示例可能包含: ``` ii mongodb-org-shell 8.0.15 amd64 Shell for the MongoDB Document Database rc mongodb-org-server <none> amd64 An object/document-oriented database ``` 其中: - `ii` = 已安装且配置完成 - `rc` = 已删除但配置文件仍保留(需 purge) - `iF` / `iU` / `rH` = 各种异常状态(需要处理) #### 删除所有相关包(不管状态如何): ```bash sudo dpkg --remove --force-remove-reinstreq \ $(dpkg -l | grep -i mongo | awk '/^..[niurf]/{print $2}') ``` 📌 命令解释: - `grep -i mongo` → 找出所有含 "mongo" 的包名 - `awk '/^..[niurf]/{print $2}'` → 提取处于非正常状态的包名 - `--force-remove-reinstreq` → 即使标记为“需要重装”也强制删除 如果提示 “no packages found”,也没关系。 --- ### ✅ 步骤 3:彻底清除配置和缓存 ```bash # 清理本地缓存的 deb 包 sudo apt clean # 清除所有已删软件的配置文件 sudo apt autoremove -y --purge # 再次确认没有残留包 dpkg -l | grep -i mongo | awk '{print $2}' | xargs sudo dpkg --purge || true ``` --- ### ✅ 步骤 4:重新添加 MongoDB 源并安装(推荐使用 6.0 LTS) ⚠️ 强烈建议不要在 Ubuntu 20.04 上强行安装 MongoDB 8.0,因为 **官方并未发布针对 `focal` 的完整支持版本**,容易出错。 👉 改用稳定兼容的 **MongoDB 6.0 LTS** #### 完整安装流程如下: ```bash # 1. 导入 GPG 公钥 curl -fsSL https://www.mongodb.org/static/pgp/server-6.0.asc | \ sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-6.0.gpg # 2. 添加源(注意是 6.0 + focal) echo "deb [signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | \ sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list # 3. 更新包列表 sudo apt update # 4. 安装 MongoDB 官方版(自动解决依赖) sudo apt install -y mongodb-org --o Dpkg::Options::="--force-overwrite" ``` > ✅ 使用 `--force-overwrite` 是为了防止未来再次出现文件冲突。 --- ### ✅ 步骤 5:启动服务并验证 ```bash # 启动 mongod 服务 sudo systemctl start mongod # 设置开机自启 sudo systemctl enable mongod # 查看状态 sudo systemctl status mongod ``` 你应该看到: ``` active (running) ``` 测试版本: ```bash mongod --version # 输出:db version v6.0.x mongosh --version # 输出:mongosh v1.x.x ``` --- ## 🛠️ 补充:如果你坚持要用 MongoDB 8.0 虽然可以强行安装,但必须满足: 1. 你的系统架构是 `x86_64`(amd64) 2. 手动处理所有依赖和覆盖 3. 接受潜在兼容性风险 你可以使用以下命令跳过一切警告强行安装: ```bash sudo apt install -y mongodb-org \ --o Dpkg::Options::="--force-confold" \ --o Dpkg::Options::="--force-overwrite" \ --o Dpkg::Options::="--force-all" ``` 但这不推荐用于生产环境。 --- ## ✅ 总结 | 问题 | 原因 | 解决方法 | |------|------|-----------| | `Unmet dependencies` | 半安装包导致依赖断裂 | 运行 `apt --fix-broken install` | | `Package not installed` | 包已不存在,无需删除 | 忽略即可 | | 文件冲突 | 新旧包共用同一路径 | 使用 `--force-overwrite` | | 安装失败反复发生 | 缓存或状态混乱 | 彻底清除 `dpkg` 状态后重来 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值