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助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。
相关推荐
曲幽4 小时前
FastAPI 身份验证总踩坑?这份 FastAPI Users “避坑指南”请收好素材积累4 小时前
博士后出站来深可申请的项目补贴等装不满的克莱因瓶4 小时前
掌握 RNN 与 LSTM 模型结构何以解忧,唯有..5 小时前
Python包管理工具pip:从入门到精通金銀銅鐵5 小时前
用 Tkinter 实现简单的猜数字游戏copyer_xyf5 小时前
Python 模块与包的导入导出_1_75 小时前
SQL Server 磁盘满了 收缩日志ice8130331815 小时前
【Python】Matplotlib折线图绘制copyer_xyf6 小时前
Python venv 虚拟环境basketball6166 小时前
Redis基础:1. Redis介绍