MongoDB は、実際にデータの削除やその他の原因でデータ サイズが減少した場合、ディスク領域を回復しません。オンライン ドキュメントには適切な説明があります。
データ ディレクトリ内のファイルがデータベース内のデータよりも大きいのはなぜですか?
データ ディレクトリ (デフォルト構成では /data/db ディレクトリ) 内のデータ ファイルは、データベースに挿入されたデータ セットよりも大きい場合があります。次の考えられる原因を検討してください。
事前に割り当てられたデータ ファイル。
データ ディレクトリでは、ファイル システムの断片化を防ぐために、MongoDB はデータ ファイルを特定のサイズに事前に割り当てます。MongoDB は、最初のデータ ファイルに .0、次の .1 などの名前を付けます。mongod が割り当てる最初のファイルは 64 メガバイト、次の 128 メガバイトというように、最大 2 ギガバイトであり、その時点で後続のすべてのファイルは 2 ギガバイトになります。データ ファイルには、領域が割り当てられているがデータを保持していないファイルが含まれます。mongod は、90% が空の可能性がある 1 ギガバイトのデータ ファイルを割り当てる場合があります。ほとんどの大規模なデータベースでは、未使用の割り当て領域はデータベースに比べて小さくなります。
Unix ライクなシステムでは、mongod は追加のデータ ファイルを事前に割り当て、ディスク領域を 0 に初期化します。
preallocDataFiles を false に設定すると、事前割り当てを無効にできます。ただし、実稼働環境では preallocDataFiles を無効にしないでください。 preallocDataFiles は、テストの場合と、データベースを頻繁に削除する小さなデータ セットでのみ使用してください。
Linux システムでは、hdparm を使用して、割り当てにかかるコストを把握できます。
time hdparm --fallocate $((1024*1024)) テストファイル
オプログ。
この mongod がレプリカ セットのメンバーである場合、データ ディレクトリには oplog.rs ファイルが含まれます。これは、ローカル データベースで事前に割り当てられた制限付きコレクションです。デフォルトの割り当ては、64 ビット インストールでのディスク容量の約 5% です。詳細については、Oplog のサイジングを参照してください。ほとんどの場合、oplog のサイズを変更する必要はありません。ただし、そうする場合は、Oplog のサイズの変更を参照してください。
ジャーナル。
データ ディレクトリには、MongoDB がデータベースに適用する前に書き込み操作をディスクに保存するジャーナル ファイルが含まれます。ジャーナリングの仕組みを参照してください。
空のレコード。
MongoDB は、ドキュメントとコレクションを削除するときに、データ ファイル内の空のレコードのリストを維持します。MongoDB はこのスペースを再利用できますが、このスペースをオペレーティング システムに返すことはありません。
割り当てられたストレージをデフラグするには、compact を使用します。これは、割り当てられたスペースをデフラグします。ストレージの断片化を解消することで、MongoDB は割り当てられたスペースを効果的に使用できます。コンパクトを実行するには、最大 2 ギガバイトの余分なディスク領域が必要です。ディスク容量が非常に少ない場合は、compact を使用しないでください。
重要
Compact は、MongoDB データ ファイルから断片化を取り除くだけで、ディスク領域をオペレーティング システムに返しません。
削除された領域を再利用するには、repairDatabase を使用してデータベースを再構築します。これにより、ストレージの断片化が解消され、オペレーティング システムに領域が解放される場合があります。repairDatabase を実行するには、最大 2 ギガバイトの余分なディスク領域が必要です。ディスク容量が非常に少ない場合は、repairDatabase を使用しないでください。
http://docs.mongodb.org/manual/faq/storage/
彼らがあなたに言わないのは、ディスクスペースを復元/回復する他の2つの方法です-あなたが行ったようにmongodump/mongorestoreを使用するか、空のディスクで新しいメンバーをレプリカセットに追加して、データベースファイルを最初から書き込むようにします。
これを監視したい場合は、db.stats() コマンドを実行すると、データ、インデックス、ストレージ、およびファイル サイズに関する豊富なデータが返されます。
http://docs.mongodb.org/manual/reference/command/dbStats/