4

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たが、アドバイスはダウンタイムを回避することに重点を置いており、それが唯一の問題であるかのように見えました。ただし、ダウンタイムをスケジュールすることはできますが、スペースが実際に再利用されないため、コマンドが期待どおりに機能しないという問題があります。

私たちは何を間違えましたか?

4

1 に答える 1