运行时convertToCapped
,MongoDB 会克隆原始集合以创建具有请求大小的新上限集合,然后再删除原始集合。您应该会在 mongod 日志中看到这一点,其序列大致如下:
Fri Jun 29 15:14:49 [FileAllocator] allocating new datafile ./capped.2, filling with zeroes...
Fri Jun 29 15:14:54 [FileAllocator] done allocating datafile ./capped.2, size: 2047MB, took 4.984 secs
Fri Jun 29 15:14:54 [conn1] command capped.$cmd command: { cloneCollectionAsCapped: "all", toCollection: ".tmp.convertToCapped.all", size: 1536870912.0 } ntoreturn:1 reslen:37 5134ms
Fri Jun 29 15:14:54 [conn1] CMD: drop capped.all
Fri Jun 29 15:14:54 [conn1] command capped.$cmd command: { convertToCapped: "all", size: 1536870912.0 } ntoreturn:1 reslen:37 5135ms
- 为上限集合预先分配了新数据文件(称为“全部”以匹配您的示例)
- 现有集合被克隆到临时上限集合
- 原始集合被丢弃
- 临时集合重命名为原始集合
因此,如果您有一个 250Gb 的封顶集合并以 250GB 重新运行 convertToCapped,您将暂时使使用的空间增加一倍(原始封顶集合为 250Gb,新封顶集合为 250Gb)。
您可以使用db.repairDatabase()回收额外的空间。