1

走った

db.runCommand({"convertToCapped": "all", size: 268435456000})

現在のコレクションを250GBに制限します。SSHセッションがタイムアウトしましたが、ディスク使用量が250GB増加しました。ログを確認して、次のことを確認しました。

Thu Jun 28 23:41:18 [conn312] command logs.$cmd command: { convertToCapped: "all", size: 268435456000.0 } ntoreturn:1 reslen:37 4399826ms
Thu Jun 28 23:41:20 [conn313] end connection 127.0.0.1:53704

ntoreturn:1とは何ですか?

コマンドを再度実行しました。すでに250GBで上限が設定されていることがわかると思いましたが、さらに250GBがいっぱいになっています。私は正確に何をしていますか?

4

1 に答える 1

2

を実行する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()を使用して、余分なスペースを再利用できます。

于 2012-06-29T05:19:03.187 に答える