MongoDB スペースの一部を解放する必要があり、コレクションから安全に削除できる 100Gb 以上のドキュメントを特定しました。
したがって、この設定を持つテスト環境からそれらを削除しました。
- mongodb バージョン 3.0.1
- シャーディングなし
- 1 ノード、レプリカなし
- ワイヤードタイガーエンジン
完了すると、ディスク上のスペースがまだ使用されており、再利用する必要があることがわかりました。この投稿を見つけて助けてくれました:両方を実行した後
db.runCommand({repairDatabase: 1})
と
db.runCommand({compact: collection-name })
100Gb +を解放しました。
次に、レプリカ ノードが 1 つあったため、設定が異なっていたことを忘れて、本番環境に進みました。
- mongodb バージョン 3.0.1
- シャーディングなし
- 1 つのプライマリ ノード、1 つのレプリカ ノード
- ワイヤードタイガーエンジン
ドキュメントを削除した後、実行します
db.runCommand({repairDatabase: 1})
OKメッセージを受け取りました(しばらくすると、10分+)。走ってみました
db.runCommand({compact: collection-name })
このエラーが発生しました:
これは低速のブロッキング操作であるため、アクティブなレプリカ セット プライマリではコンパクトを実行しません。force:true を使用して強制します
だから私たちは走る
db.runCommand({compact: collection-name, force: true })
OKメッセージを(ほぼ瞬時に)受け取りましたが、スペース上のディスクはまだ使用されており、解放されていません。
repairDatabase
我々は、レプリカ セットでandコマンドを実行するための解決策を探しましcompact
たが、アドバイスはダウンタイムを回避することに重点を置いており、それが唯一の問題であるかのように見えました。ただし、ダウンタイムをスケジュールすることはできますが、スペースが実際に再利用されないため、コマンドが期待どおりに機能しないという問題があります。
私たちは何を間違えましたか?