私のmongodbは私のディスクの85%である114gを取ります
db.repairDatabase()
十分な空き容量がないため、使用して空き容量を解放しようとすると失敗します
以前はディスクの 90% を占める大きなコレクションを持っていたので、データがそれほど多くのスペースを必要としないことはわかっています。
次に、このコレクションを削除し、そのデータの 20% のみを再挿入しました。
どうすればスペースを解放できますか?
私のmongodbは私のディスクの85%である114gを取ります
db.repairDatabase()
十分な空き容量がないため、使用して空き容量を解放しようとすると失敗します
以前はディスクの 90% を占める大きなコレクションを持っていたので、データがそれほど多くのスペースを必要としないことはわかっています。
次に、このコレクションを削除し、そのデータの 20% のみを再挿入しました。
どうすればスペースを解放できますか?
データ ストレージ用のディスク領域はMongoDB によって事前に割り当てられ、事前に割り当てられた新しいファイルでデータベースを再構築することによってのみ再利用できます。通常、これは、db.repairDatabase()
またはバックアップと復元によって行われます。お気づきのように、修復にはデータベースの新しいコピーを作成するのに十分なスペースが必要なため、オプションではない場合があります。
以下に考えられる解決策をいくつか示しますが、いずれも別の場所に空き領域を確保する必要があります。
そのデータベースをmongodumpするのに十分な空き容量がある場合はmongodump
、削除することができますmongorestore
。 db.dropDatabase()
ディスク上のデータ ファイルを削除します。
LVMやZFSなどのボリューム マネージャーを使用している場合は、データベースを修復またはダンプして復元するために、論理ボリュームに余分なディスク領域を追加できます。
別のサーバーがある場合は、現在のサーバー (レプリカ セットの「プライマリ」サーバー) を停止せずにデータを同期するようにレプリカ セットをセットアップできます。データがセカンダリ サーバーに同期されたら、元のプライマリ サーバーを停止して、データベースを再同期できます。
レプリカ セットの場合、最低 3 つのノードが必要であることに注意してください。つまり、3 つのデータ ノード、または 2 つのデータ ノードとアービターのいずれかです。実稼働環境では、アービターは通常 3 番目のサーバーで実行されるため、現在のプライマリが利用できない場合にいずれかのデータ ノードをプライマリにすることができます。ディスク容量を再利用するシナリオでは、代わりにいずれかのサーバー (おそらく新しいサーバー) でアービターを実行しても問題ありません。
レプリカ セットは、サーバーをアプリケーションで利用できる状態に保ちながら、メンテナンス (データベースのコンパクト化や修復の実行など) のためにサーバーを停止できるため、一般に管理目的で非常に役立ちます。自動フェイルオーバー/回復のためにデータの冗長コピーを維持するなど、他の利点もあります。