collStats 看什么
db.<集合>.stats() 返回文档数、逻辑数据量、磁盘存储量、每条平均大小以及各索引的占用,是评估膨胀、索引成本与容量规划的基础数据。它同时暴露压缩信息(WiredTiger 引擎),可以把「逻辑大小」与「实际落盘大小」放在一起对比,判断压缩效果与碎片情况。
字段逐列读法
| 字段 | 含义 | 判读要点 |
|---|---|---|
| count / nobjects | 文档数量 | 与业务预期对账,突增突降都要有解释 |
| size | 文档逻辑大小(字节) | 与 storageSize 一起看压缩效果 |
| storageSize | 落盘占用(含压缩与碎片) | 远大于 size 说明压缩率低或碎片多 |
| avgObjSize | 平均每条文档字节数 | 异常增大往往是字段膨胀或内嵌数组增长 |
| totalIndexSize / indexSizes | 全部索引占用与各索引明细 | 索引总量超过数据量时要审查冗余索引 |
| nindexes | 索引数量 | 写入放大与索引数量近似成正比 |
| wiredTiger | 引擎级信息(压缩比、块管理器、缓存) | 压缩算法与块统计在这里查看 |
示例
示例
db.orders.stats().size // 逻辑数据量
db.orders.stats().storageSize // 实际落盘占用
db.orders.stats().avgObjSize // 平均文档大小
db.orders.stats().totalIndexSize // 索引总占用
db.orders.stats().indexSizes // 逐索引占用,用于找冗余大索引
db.orders.stats(1024 * 1024) // 以 MB 为单位返回
// 新版本推荐用聚合阶段替代,可指定 scale 并只取 storageStats
db.orders.aggregate([{ $collStats: { storageStats: { scale: 1048576 } } }])典型使用场景
- 容量规划:按文档数与平均大小推算增长趋势,提前扩容
- 索引成本评估:找出占用大但很少命中的索引,删减写入放大
- 膨胀排查:storageSize 明显大于 size 时检查删除模式与压缩设置
- 巡检基线:把 count、size、totalIndexSize 采集为监控指标,观察突刺
- 迁移前估算:评估搬迁窗口与目标磁盘容量
分片集合上的 stats 会向各分片采集并汇总,输出里带 shards 明细;高负载时段避免频繁调用,采集间隔通常按分钟或小时级即可。
stats 的输出与版本相关:不同 MongoDB 版本字段名与嵌套结构有差异,跨版本脚本不要硬编码字段路径,先用一次真实输出核对。