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
TL; DR:2つのオプションがあります。 MongoDBを ジャーナルファイルのサイズを制限する 128MBに起動する場合は、--smallfiles
スタートアップオプションを使用するか、--nojournal
オプションを使用してジャーナリングをオフにします。本番環境で--nojournal
を使用することは通常悪い考えであり、開発と開発で異なるコードを使用しないように、開発でも異なる書き込みの懸念事項を使用するのが理にかなっています。
長い答え:いいえ、ジャーナルファイルを削除するのは安全ではありません。ジャーナリングのアイデアは次のとおりです。
書き込みが行われます。今、その書き込みを永続的(およびデータベースの耐久性)にするには、書き込みを何らかの方法でディスクに書き込む必要があります。
残念ながら、ディスクへの書き込みは何年もかかります RAMへの書き込みと比較して ですので、データベースはジレンマに陥ります:予期しないシャットダウンはデータ損失を引き起こすため、ディスクへの書き込みは危険です。ただし、1回の書き込み操作ごとにディスクに書き込むと、データベースのパフォーマンスが著しく低下するため、実用上使用できなくなります。
これで、データベースはデータファイル自体に書き込む代わりに、すべての要求に対して行うのではなく、実際のデータファイルにまだコミットされていないすべての操作を保存するジャーナルファイルに追加されます。これははるかに高速です。なぜなら、ファイルは常に読み書きされるため、すでに「ホット」であり、ファイルの束ではなく、1つのファイルであり、最後に、保留中のすべての操作を100msごとにバッチで書き込むためです。デフォルトで。何かの途中でこのファイルを削除すると、大混乱に陥ります。
Mnemosynの答えで説明したように、ジャーナリングはストレージエンジンに不可欠です。幸いなことに、ある程度制御することができます。以下は、MMAPv1ストレージエンジン用に作成されたもので、MongoDB 3.2まではデフォルトでした。次に、WiredTigerが最適なエンジンになりました。このエンジンの詳細については、この回答の下部を参照してください。
開発サーバーでは、次の手順を使用しました。
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
YAML config style でMMAPv1を使用している場合、上記と同じ手順を使用して構成をバックアップしますが、
mmapv1:
構成ブロック、挿入
smallFiles: true
。その後、上記の手順に従って、ジャーナルを削除しながらサーバーを再起動します。
開発マシンでは、デフォルトで journal compression が有効になっているため、WiredTigerの下のジャーナルファイルはMMAPv1の下よりもデフォルトでいくらか小さくなります。 ドキュメント によると、「MongoDBのWiredTigerジャーナルファイルの最大サイズ制限は約100 MBです」。 「60秒または2ギガバイトのジャーナルデータの間隔でチェックポイントを作成します(つまり、スナップショットデータをディスクに書き込みます)」。
したがって、データベースで少量のリクエスト(変更するデータがほとんどない)のみを実行している場合、WiredTigerを使用するジャーナルファイルは100 MBの低い倍数を超えてはなりません。ただし、ジャーナルファイルのサイズは設定できないようです。