MongoDB中如何查看集合状态信息
一、集合状态信息核心字段解析
用户示例中的 db.orders.stats() 返回结果包含以下关键字段,其含义与作用如下:
| 字段 | 含义与场景 | 引用来源 |
|---|---|---|
ns |
集合的命名空间(数据库名.集合名),用于标识集合的全局唯一性。例如 test.orders 表示 test 数据库的 orders 集合。 |
|
size |
集合中所有文档的 原始数据总大小(单位:字节),包括字段名、文档内容,但不含索引。反映数据实际规模,用于评估备份或迁移成本。 | |
count |
当前集合的文档总数,用于监控数据增长趋势。例如 200000 表示该集合包含 20 万条文档。 |
|
avgObjSize |
文档平均大小(单位:字节),通过 size / count 计算得出。例如 235 表示每条文档平均占用 235 字节,可用于优化存储和查询性能。 |
- |
capped |
是否为固定集合(true/false)。固定集合(Capped Collection)具有预定义容量和自动淘汰旧数据特性,适用于日志等高频写入场景。 |
|
nindexes |
当前集合的索引数量。默认包含 _id 主键索引,若用户未手动创建其他索引,此值为 1。 |
|
totalIndexSize |
所有索引占用的 磁盘空间总大小(单位:字节)。例如 2756608 表示索引占用约 2.75 MB。需关注是否与数据量匹配,避免索引冗余。 |
|
totalSize |
集合在磁盘上的 物理占用总空间(包含数据、索引、预分配空间和碎片)。例如 12853248 表示总占用约 12.85 MB。若远大于 size,说明存在碎片。 |
|
indexSizes |
各索引的磁盘空间占用详情。例如 { _id_: 2756608 } 表示 _id 索引占用 2.75 MB。 |
二、关键字段对比与优化建议
1. size vs totalSize
• 差异:
• size:仅统计文档原始数据大小,不包含索引和存储碎片。
• totalSize:包含文档数据、索引和预分配空间,反映实际磁盘占用。
• 优化场景:
• 碎片回收:若 totalSize 远大于 size,可执行 compact 命令释放未使用空间(需在低峰期操作)。
• 存储引擎选择:使用 WiredTiger 引擎(默认启用压缩)可减少 totalSize。
2. capped 固定集合特性
• 适用场景:高频写入且无需长期保留的数据(如日志、实时监控)。
• 限制:
• 不支持删除单条文档,仅能通过 drop() 清空集合。
• 更新文档时若导致大小变化,操作会失败(需保持数据结构稳定)。
3. 索引优化
• 监控字段:关注 nindexes 和 totalIndexSize,避免过度索引。
• 策略:
• 删除冗余索引:通过 db.collection.dropIndex("index_name") 移除低效索引。
• 使用覆盖索引:优化查询性能,减少回表操作。
三、操作示例
1. 查看集合状态
// 查看 orders 集合状态
db.orders.stats();
// 仅查看特定字段(如文档总数和大小)
db.orders.stats().count; // 返回 200000
db.orders.stats().size; // 返回 47083007(约 47MB)
2. 碎片回收命令
// 压缩集合以释放未使用空间(阻塞操作)
db.runCommand({ compact: "orders" });
3. 判断是否为固定集合
// 若 capped 为 true,则为固定集合
if (db.orders.stats().capped) {
print("该集合为固定集合,容量上限:" + db.orders.stats().maxSize + "字节");
}

浙公网安备 33010602011771号