web-dev-qa-db-ja.com

MongoDBデータの削除-ディスク容量の再利用

可能性のある複製:
mongodbで削除されたスペースを自動圧縮しますか?

私の理解では、削除操作ではMongoDBはディスク領域を解放しませんが、必要に応じて再利用します。

  1. あれは正しいですか?
  2. そうでない場合、修復コマンドを実行しますか?
  3. 修復は、mongoのライブインスタンスで実行できますか?
20
griffin
  1. はい、それは正しいです。
  2. いいえ、mongodbにできるだけ多くのディスクスペースを与えることをお勧めします(mongodbが、より少ないディスクの断片化よりも多くのスペースを割り当てることができる場合、追加のスペースの割り当ては高価な操作です)。ただし、必要に応じて、mongodb Shellからdb.repairDatabase()を実行して、データベースのサイズを縮小できます。
  3. はい、稼働中のmongodbインスタンスでrepairDatabaseを実行できます(ピーク時間なしで実行することをお勧めします)
19
Andrew Orsich

これは、このMongoDBの質問の一部を複製したものです...

mongodbで削除されたスペースを自動圧縮しますか?

方法の詳細については、その回答を参照してください...

  • スペースを再利用する
  • サーバーサイドJSを使用して定期的なジョブを実行し、スペースを取り戻します(実行可能なスクリプトを含む...)
  • いくつかのユースケースでキャップされたコレクションをどのように調べたいのか!

また、この関連するブログ投稿を見ることができます: http://learnmongo.com/posts/compacting-mongodb-data-files/

7
Justin Jenkins

システムをロックする余裕がない場合、またはストレージが2倍にならない場合は、db.repairDatabase()を実行するよりもうまくいく別のソリューションがあります。

レプリカセットを使用している必要があります。

私の考えは、ディスクを使用している余分なデータをすべて削除し、セカンダリレプリカを停止し、そのデータディレクトリをワイプして起動し、マスターと再同期させることです。一度に1つずつ、他のセカンダリで繰り返します。

マスターで、rs.stepDown()を実行して、同期されたセカンダリの1つにMASTERを渡します。次に、これを停止し、ワイプして、再同期させます。

プロセスには時間がかかりますが、rs.stepDown()を実行すると、数秒のダウンタイムしかかかりません。

3
Mojo