MongoDB慢查询需先在服务端启用profiling:db.setProfilingLevel(1, { slowms: 100 }),日志写入system.profile;该集合不支持changeStream,须轮询并建ts索引;Node.js驱动可监听commandStarted/Succeeded事件实现客户端耗时统计;APM集成需匹配版本、显式开启查询详情采集,并手动注入trace上下文。如何开启 MongoDB 的慢查询日志(serverStatus + profile)Node.js 本身不直接捕获 MongoDB 慢查询,真正起作用的是 MongoDB 服务端的 profiling 机制。必须先在数据库侧打开慢操作记录,否则任何 Node.js 层的监听都无从谈起。常见错误是只在应用里加监听,却没开 db.setProfilingLevel(),结果永远收不到慢查询事件。连接到目标数据库后执行:db.setProfilingLevel(1, { slowms: 100 })</li><li><code>slowms 是毫秒阈值,设为 100 表示记录所有 >100ms 的操作(生产建议从 200--500 开始,避免日志爆炸)级别 1 只记录慢操作;2 记录全部(仅调试用,严禁上生产)配置生效后,慢查询会写入 system.profile 集合,可通过 db.system.profile.find() 查看用 changeStream 监听 system.profile 是否可行?不行。MongoDB 的 system.profile 是一个特殊 capped collection,不支持 changeStream ------ 尝试监听会直接报错 NamespaceNotFound 或 CommandNotSupported。这是最容易踩的坑:看到"能监听集合变更",就想当然套用到 system.profile 上。替代方案只有轮询:db.system.profile.find({ ts: { $gt: lastSeenTs } }).sort({ ts: 1 })每次查询后更新 lastSeenTs,避免重复读取注意加索引:db.system.profile.createIndex({ ts: 1 }),否则轮询性能极差轮询间隔建议 ≥1s,太频繁会增加数据库压力在 Node.js 中用 driver 做轻量级慢查询拦截(driver-level hook)MongoDB Node.js Driver 4.0+ 支持命令监控(commandStartedEvent 和 commandSucceededEvent),可在驱动层统计耗时,无需依赖服务端 profiling。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。
相关推荐
Decay__39 分钟前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查代码山河3 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?在世修行3 小时前
智学文枢:题目流水线梯度下降者4 小时前
零基础入门Python 爬虫小徐不徐说5 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件“AI国潮设计-小江”5 小时前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计论文复现现场5 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行benchmark_cc6 小时前
用 Python 拉 A 股全市场实时快照:Notebook 请求、结果校验与易错点伞伞悦读6 小时前
【第70期】Adam二阶矩不是方差:偏差校正、动量与AdamW完整实验Decay__6 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检