検索

ホームページ  >  に質問  >  本文

mongodb は、ドキュメントが「縮小」された後に空にする必要があるスペースをどのように再利用しますか?

使用されるバージョンは mongodb-win32-x86_64-3.2.1 で、デフォルトの WiredTiger ストレージ エンジンが使用されます。

コレクションには約 400 万のドキュメントがあり、40G のスペースを占有します。その後、各ドキュメント処理の無駄な部分が走査されて更新されました (ドキュメントは削除されませんでした)。このタスクを実行するスクリプトはスケジュールどおりに実行され、完了しました。出力統計によると、ドキュメント全体の削減は元の約 45% に減少し、20G 以上のスペースが解放されました。ただし、データベース ファイルのサイズは小さくなったわけではありません。少し(1%くらい)。

ドキュメント内のストレージに関する章を読んでください。https://docs.mongodb.com/v3.2...,其中提到删除文档导致的空记录占用空间可通过compact回收(使用WiredTiger存储引擎时),没提到前述这种修改文档形成的“虚占空间”的情形,我运行了compact,几秒钟就结束了,存储文件没有变小。那么该怎么办呢?

リーリー
漂亮男人漂亮男人2788日前604

全員に返信(2)返信します

  • ringa_lee

    ringa_lee2017-05-02 09:26:24

    確かにWTは最新バージョンを使うと軽くなったように見えますが、やはり動作が重いのは避けられない問題です。 Windows でのディスクのデフラグを想像してみてください。原理は同じです。より推奨される、影響の少ないアプローチは、レプリカ セットを使用してすべてのノードをローリング的に再初期化し、スペースを解放することです。 compact确实可以回收空间,但是因为某个bug这应该是在3.2的某个版本之后生效的,我不记得具体版本号(3.2.9?),但是可以肯定3.2.1肯定无效,而升级到最新版本3.2.12肯定能解决这个问题。
    相对于repairDatabase来说,compact

    より重要な質問は、このスペースを取り戻すことが実際にあなたにとって意味があるかということです。ほとんどの場合、システムがこれらのスペースを占有しているという事実は、(システム設計に変更がない限り) これらのスペースを再び占有する可能性が高いことを意味します。それを解放して後で再割り当てするのではなく、そこに保持しておくと、システムがそれを再利用します。

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-02 09:26:24

    以下は私の理解です:

    1. 単一コレクションの圧縮ではファイル システムのストレージ スペースは再利用されません。データベース全体の db.repairDatabase() のみがファイル システムのストレージ スペースを再利用できます。 repirDatabase() を使用してみてください。

    2. エクスポート/インポート収集方法も使用できます

    上記の操作がシステムのパフォーマンスに与える影響に注意してください。参考までに。

    私は最近休暇中ですが、春節休暇が楽しく過ごせることを祈っています。

    MongoDB を愛してください!

    返事
    0
  • キャンセル返事