15

削除されたスペースを再利用してデータ ファイルのサイズを縮小したいのですがdb.repairDatabase()、ディスクの空き容量が不足しているため、 を実行できません。

4

5 に答える 5

15

更新: WiredTiger を使用すると、空き領域ができます。compact

この質問に対する元の回答は次のとおりです: MongoDB データベース ファイル サイズの削減

repairそれ以外にスペースを再利用するものは何もありません。これcompactにより、既存のスペースをより長く使用できるようになります。そうしないと、より大きなドライブに移行する必要があります。

これを行う 1 つの方法は、レプリカ セットからオフライン セカンダリを使用することです。これにより、移行、修復、移動、および元に戻すためのメンテナンス ウィンドウ全体が提供されます。

レプリカ セットを実行していない場合は、その実行を検討するときが来ました。

于 2012-07-23T18:35:02.140 に答える
13

このコマンドは、単一のコレクションに対して実行することもcompact、縮小するすべてのコレクションで 1 つずつ実行することもできます。

http://www.mongodb.org/display/DOCS/Compact+Command

db.runCommand( { compact : 'mycollectionname' } )

コメントで述べたように、私は間違っていました。コンパクトは実際にはディスク領域を再利用せず、コレクション インデックスの最適化と再構築のみを行います。

代わりに、空き容量のある別のドライブがある場合は、「--repairpath」オプションを使用できます。

例えば:

mongod --dbpath /data/db --repair --repairpath /data/db0

ここに表示: http://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/

于 2012-07-23T18:04:08.193 に答える
12

手動で mongodump と mongorestore を実行することもできます。これは基本的にrepairDatabaseと同じです。そうすれば、十分なディスク容量がある別のマシンにダンプして復元できます。

于 2013-02-27T13:01:38.507 に答える
3

レプリカ セットを実行している場合は、一度に 1 つずつ、各セカンダリで再同期を発行する必要があります。これが完了したら、プライマリをステップダウンし、新しく割り当てられたセカンダリを再同期します。

再同期するには、mongod インスタンスを停止し、ローカルを削除して、プロセスのバックアップを開始します。ログを見て、すべてが正常にバックアップされ、再同期が開始されたことを確認します。

大量のデータ/インデックスがある場合は、oplog が十分に大きいことを確認してください。そうしないと、陳腐化する可能性があります。

于 2014-10-22T21:22:56.163 に答える
1

レプリカ セットを使用している場合は、もう 1 つのオプションがありますが、多くの注意事項があります。別のセット メンバーにフェールオーバーしてから、元のプライマリのファイルを削除し、完全な再同期を実行できます。完全な再同期では、修復と同様の方法でファイルを最初から書き直しますが、インデックスを再構築する必要もあります。これは安易に行うべきではありません。

このパスをたどる場合、ディスク容量の再利用のためにこれを行う前に、3 つのメンバーのレプリカ セットを用意することをお勧めします。これにより、メンバーが最初から同期しているときにいつでも 2 つのセット メンバーが完全に機能します。

レプリカ セットがない場合は、2 つのセカンダリを含むレプリカ セットを作成することをお勧めします。それらを最初に同期すると、フラグメント化されていない、パディングされていない、データの素敵なバージョンが作成されます。詳細はこちら:

http://www.mongodb.org/display/DOCS/Replica+Set+Configuration

于 2012-07-24T00:27:51.470 に答える