web-dev-qa-db-ja.com

mongodbのジャーナルファイルを削除しても安全ですか?

3.1Gジャーナルファイルを削除すると、Sudo service mongodb restartは失敗します。ただし、このファイルはスペースを取りすぎています。この問題を解決するにはどうすればよいですか?どうすれば削除できますか?

bash$ du -sh /var/lib/mongodb/*
4.0K    _tmp
65M auction_development.0
128M    auction_development.1
17M auction_development.ns
3.1G    journal
4.0K    mongod.lock
62
user94602

TL; DR:2つのオプションがあります。 MongoDBを ジャーナルファイルのサイズを制限する 128MBに起動する場合は、--smallfilesスタートアップオプションを使用するか、--nojournalオプションを使用してジャーナリングをオフにします。本番環境で--nojournalを使用することは通常悪い考えであり、開発と開発で異なるコードを使用しないように、開発でも異なる書き込みの懸念事項を使用するのが理にかなっています。

長い答え:いいえ、ジャーナルファイルを削除するのは安全ではありません。ジャーナリングのアイデアは次のとおりです。

書き込みが行われます。今、その書き込みを永続的(およびデータベースの耐久性)にするには、書き込みを何らかの方法でディスクに書き込む必要があります。

残念ながら、ディスクへの書き込みは何年もかかります RAMへの書き込みと比較して ですので、データベースはジレンマに陥ります:予期しないシャットダウンはデータ損失を引き起こすため、ディスクへの書き込みは危険です。ただし、1回の書き込み操作ごとにディスクに書き込むと、データベースのパフォーマンスが著しく低下するため、実用上使用できなくなります。

これで、データベースはデータファイル自体に書き込む代わりに、すべての要求に対して行うのではなく、実際のデータファイルにまだコミットされていないすべての操作を保存するジャーナルファイルに追加されます。これははるかに高速です。なぜなら、ファイルは常に読み書きされるため、すでに「ホット」であり、ファイルの束ではなく、1つのファイルであり、最後に、保留中のすべての操作を100msごとにバッチで書き込むためです。デフォルトで。何かの途中でこのファイルを削除すると、大混乱に陥ります。

73
mnemosyn

Mnemosynの答えで説明したように、ジャーナリングはストレージエンジンに不可欠です。幸いなことに、ある程度制御することができます。以下は、MMAPv1ストレージエンジン用に作成されたもので、MongoDB 3.2まではデフォルトでした。次に、WiredTigerが最適なエンジンになりました。このエンジンの詳細については、この回答の下部を参照してください。

MMAPv1

MongoDB <2.6(非YAML構成)

開発サーバーでは、次の手順を使用しました。

cp -p /etc/mongodb.conf /etc/mongodb.conf.orig
vi /etc/mongodb.conf

今、挿入

smallfiles=true

mongodb.confに保存してから保存します。 smallfilesは、ジャーナルファイルを128MBに制限します。

service mongodb stop
rm -rf /var/lib/mongodb/journal/*
service mongodb start

MongoDB> = 2.6(YAML Config)

YAML config style でMMAPv1を使用している場合、上記と同じ手順を使用して構成をバックアップしますが、

  mmapv1:

構成ブロック、挿入

    smallFiles: true 

。その後、上記の手順に従って、ジャーナルを削除しながらサーバーを再起動します。

WiredTiger(MongoDB> = 3.0、デフォルトは3.2以降)

開発マシンでは、デフォルトで journal compression が有効になっているため、WiredTigerの下のジャーナルファイルはMMAPv1の下よりもデフォルトでいくらか小さくなります。 ドキュメント によると、「MongoDBのWiredTigerジャーナルファイルの最大サイズ制限は約100 MBです」。 「60秒または2ギガバイトのジャーナルデータの間隔でチェックポイントを作成します(つまり、スナップショットデータをディスクに書き込みます)」。

したがって、データベースで少量のリクエスト(変更するデータがほとんどない)のみを実行している場合、WiredTigerを使用するジャーナルファイルは100 MBの低い倍数を超えてはなりません。ただし、ジャーナルファイルのサイズは設定できないようです。

70
Mitja

mongodbはその後進化しました。 v3.4.1安定版 になりました。
私は v3.2 にいます:
コメント解除# mmapv1:したがって、次のようになります。

  mmapv1:
    smallFiles: true 

別のバージョンを使用している場合は、storage Options上のreference/configuration-optionsページ。

journalを空にすることを忘れないでください

Sudo service mongodb stop
Sudo rm -rf /var/lib/mongodb/journal/*
Sudo service mongodb start
9
Jadeye