110 GB以上のコレクションを削除しても、/ var / lib / mongodbディレクトリのサイズが変わらないのはなぜですか?


12

MongoDBとスペースの使用に問題があります。特に、私はかつてディスク上に合計110+ GBの約6億件のレコードの大規模なコレクションがありました。最近、データが古いため削除することにしました。そのため、rockmongoのWebインターフェースからコレクションを削除しました。したがって、rockmongoはコレクションを表示しませんが、ディスク使用量はまったく変わりません。

データベースをディスク上のデータベースファイルと同期するために実行する必要がある、認識していないクリーンな操作はありますか?

私は「修復」を実行しようとしましたが、システムはディスクに十分なスペースがないと不平を言います...それはすべてMongoDBによって使用されているからです。

回答:


19

ほとんどのデータベースシステムと同様に、データを削除してもデータベースファイルは縮小されず、データは削除/削除済みとしてマークされ、スペースが再利用されます。

ここにdb.repairDatabase()記載されているように、スペースを圧縮する必要があります


2
ハードディスクの空き容量が少なすぎてそれができませんでした。しかし、私はこの方法を解決しました:mongodumpoldDatabase.dropDatabase()mongorestore --db newDatabase dump/oldDatabase
チュヌズ

4

上記のmongodump / drop / mongorestoreアプローチは技術的な観点からは正常に機能しますが、データベースをオフラインにする必要があります。これはサービスに影響するイベントです。

ダウンタイムなしでこれを行いたい場合、およびMongoDBレプリカセット[1]を使用している場合は、次のようにすることができます。

  1. メンバーを選択し、そこでMongoDBを停止します(mongodb停止サービス)。これがプライマリである場合、別のメンバーがプライマリに選出されるのを待ちます。
  2. このメンバーのデータファイルを削除します(cd / var / lib / mongodb; rm *)。
  3. MongoDBサービスを再起動します(service mongodb start)。
  4. メンバーがPRIMARY(rs.status())に再同期するのを待ちます。
  5. これにより、必要な(より小さい)データファイルのみが再構築されます。

次に、レプリカセット内の他のメンバーごとに上記の手順を繰り返します。

[1] https://docs.mongodb.org/manual/tutorial/deploy-replica-set


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.