首页/数据/NoSQL 速查/集合统计与索引占用
MongoDB99 条

集合统计与索引占用

db.<集合>.stats() 返回文档数、数据大小、存储大小与各索引占用,是评估膨胀与索引成本的常用依据。

NoSQL 速查数据更新于 2026-10-13

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 版本字段名与嵌套结构有差异,跨版本脚本不要硬编码字段路径,先用一次真实输出核对。

易错点

  • 把 size 当作磁盘占用做容量规划:实际落盘是 storageSize,索引还不算在内,容易低估所需空间
  • 只看文档数不看 avgObjSize:条数不变但单条变大时容量仍会持续上涨
  • 在分片集合上高频调用 stats 做看板:每次都会打到所有分片,成本随分片数放大
  • 删除了数据就认为空间立刻归还:WiredTiger 下空间回收是渐进的,长期需要靠合理的删除策略与整理

数据来源与参考

  • MongoDB Manual: db.collection.stats()
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌