を実行する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
- 新しいデータファイルは、上限のあるコレクションに事前に割り当てられます(例に一致するように「all」と呼ばれます)
- 既存のコレクションは、一時的に上限のあるコレクションに複製されます
- 元のコレクションは削除されます
- 一時的なコレクションは元のコレクションに名前が変更されます
したがって、250Gbの上限付きコレクションがあり、250GBでconvertToCappedを再実行すると、使用されるスペースが一時的に2倍になります(元の上限付きコレクションの場合は250Gb、新しい場合は250Gb)。
db.repairDatabase()を使用して、余分なスペースを再利用できます。