知其然,知其所以然
MongoDB 2026-10-12

profiler 与 slowms

实测 profiler:默认级别 0、slowms = 100;阈值 100 ms 时 20 次全表扫描一条 Slow query 日志都没有,5 ms 时是 28 条(20 个 find + 8 个 getMore);级别 1/2 往 system.profile 写;system.profile 默认 1 MB capped,级别 2 的开销是 1.15 倍且 18,000 条操作只剩 4,280 条;sampleRate = 0.1 只记约 10%。

MongoDB profiler slowms system.profile sampleRate 慢查询 真实验证 动画演示
MongoDB 2026-10-12

currentOp 与 killOp

实测 $currentOp 与 killOp:另一个连接里的慢 find 能看到完整命令、planSummary 与 microsecs_running;killOp 之后 0.0 秒收到 11601 Interrupted(不杀要 2.6 秒),$where 的 sleep 与 $function 的 JS 循环都能打断;maxTimeMS = 1000 在 1.02 秒后以 50 MaxTimeMSExpired 中止;$currentOp 也会列出后台线程和它自己。

MongoDB currentOp killOp maxTimeMS Interrupted 真实验证 动画演示
MongoDB 2026-10-12

serverStatus 里该盯的指标

实测 serverStatus 里该盯的指标:opcounters 的增量(insert 记文档数,serverStatus 自己也算一次 command)、metrics.document 与 queryExecutor 的 scanned/scannedObjects(无索引 49,891 个文档 vs 有索引 499)、connections(每个 pymongo 客户端 3 个连接)、wiredTiger.cache 与 opLatencies。

MongoDB serverStatus opcounters metrics connections wiredTiger opLatencies 真实验证 动画演示
MongoDB 2026-10-12

mongostat 与 mongotop 输出怎么读

实测 mongostat 与 mongotop:默认列的含义与空闲时的数值;对着每秒 300/100/50/20 的已知负载,mongostat 首行吻合、后面几行因采样窗口不对齐而偏差;-o 与 --json;mongotop 的 total/read/write;批量写入时 insert 约 31 万/秒、dirty 1.8% → 4.4%;以及 qrw/arw 与 serverStatus 对不上的现象。

MongoDB mongostat mongotop 监控 qrw arw 真实验证 动画演示
MongoDB 2026-10-12

SCRAM 认证:握手几步,角色权限怎么生效

实测 SCRAM 认证:--auth 下未认证 code 13、localhost 例外;system.users 里只存 salt/iterationCount/storedKey/serverKey(SHA-256 是 15000 次迭代);手写 saslStart/saslContinue 握手(2 条命令)并验证 storedKey;密码错与用户不存在返回同一个 code 18;角色授予回收立即对同一连接生效;SCRAM-SHA-256 认证约 3.4 ms。

MongoDB SCRAM 认证 授权 roles saslStart 真实验证 动画演示
MongoDB 2026-10-12

连接数与线程模型

实测 mongod 的连接与线程模型:连接数从 4 加到 1003,线程数 73 → 1072(一个连接一个线程),RSS 约 73 KB/连接,关闭后线程回落但 RSS 不回落;--maxConns 50 时 44 成功 16 被拒(connections.rejected、日志 Connection refused…);available 与 --maxConns 的关系;新建连接比复用慢 7.4 倍。

MongoDB 连接 线程 maxConns connections 真实验证 动画演示
MongoDB 2026-10-12

WiredTiger 的读写 ticket 与并发

实测 9.0.2 的读写 ticket:初始 10 个、由 throughputProbing 缓慢调整(64 线程持续 30 秒只涨到 13);40 个并发慢读最快 822 ms、最慢 3052 ms 且排队 29 个;改成固定并发后 ticket 下限为 5(设 4 返回 BadValue),16 并发总耗时 2737 ms,放大到 128 后 1198 ms 且不排队。

MongoDB WiredTiger ticket 并发 executionControl throughputProbing 真实验证 动画演示
MongoDB 2026-10-12

FTDC:诊断数据里记了什么

实测 FTDC:默认每秒采样、每块 300 个采样、目录上限 500 MB;文件是 BSON 块序列(type 0/1/2),type 1 是 zlib 压缩的参考文档加 varint 差值流;一个采样 5,036 个指标;自己写解码器还原出 opcounters.insert 的增量(2000+2000+2000+1000 = 7000)与真实插入一致;估算空闲实例每天约 12.5 MB。

MongoDB FTDC diagnostic.data 诊断数据 serverStatus 真实验证 动画演示
MongoDB 2026-09-09

分片策略:一条查询是怎么知道该去问哪个 shard 的

本机真实搭建 1 配置服务器 + 2 分片 + 1 mongos 的分片集群,真实迁移 chunk,用 explain() 对比三种查询的分片路由结果,对照 mongos 真实源码解释快速路径与兜底路径。

分片 路由 动画演示
MongoDB 2026-09-08

读写一致性:写进去了,为什么读不到

真实冻结两个从节点的 oplog 应用,写入后对比 readConcern local/majority 的可见性差异,并触发一次真实的 writeConcern 超时,对照 MongoDB 真实源码解释多数派提交点机制。

readConcern writeConcern 动画演示
MongoDB 2026-09-07

副本集选举:谁能当主节点,谁说了算

本机真实跑起 3 节点副本集,亲眼见证两次真实选举(超时触发与 stepDown 触发),对照 MongoDB 真实源码解释 dry run、投票拒绝规则与当选后的 catch-up 阶段。

副本集 选举 动画演示
MongoDB 2026-09-06

oplog:副本集是怎么把一次写入传播出去的

本机单节点副本集上真实抓取 insert/update/delete 的 oplog 记录,把同一条 update 记录用 applyOps 重放两遍验证幂等性,对照 MongoDB 真实源码逐条确认。

oplog 副本集 动画演示
京ICP备2026067502号-1京公网安备11010502063487号