約1GBのスペースを使用するmongodbデータベースがあります。サーバーの容量が足りなくなったときに驚いたのですが、ジャーナルが3GBを使用していることに気づきました。
documentation は、「MongoDBがジャーナルファイルのすべての書き込み操作を適用すると、これらのファイルを削除する」と述べていますが、データベースが同期され、ジャーナリングが3回行われるため、そうではないようです。データベース全体よりも大きい。
これらのジャーナリングファイルを削除して、使用するスペースを減らすようにシステムを構成するにはどうすればよいですか?
引用したドキュメントは正しいです。 db.fsyncLock() コマンドを実行すると、ディスクへのすべての変更がフラッシュされ、ジャーナルファイルが削除されます。 db.fsyncUnlock() を実行し、別の書き込みが到着するとすぐに、これらのジャーナルファイルが再表示されます。
テストシステムの簡単な例を次に示します。
> db.foo.insert({"id" : 1})
ジャーナルディレクトリは次のようになります。
$ls /usr/local/var/mongodb/journal/
j._1 lsn
$
それでは、ロックしてすべてをディスクにフラッシュしましょう。
> db.fsyncLock()
{
"info" : "now locked against writes, use db.fsyncUnlock() to unlock",
"seeAlso" : "http://dochub.mongodb.org/core/fsynccommand",
"ok" : 1
}
ジャーナルディレクトリは空になりました。
$ls /usr/local/var/mongodb/journal/
$
ロックを解除し、挿入します。
> db.fsyncUnlock()
{ "ok" : 1, "info" : "unlock completed" }
> db.foo.insert({"id" : 1})
これで、ジャーナルファイルが再び作成されました。
$ls /usr/local/var/mongodb/journal/
j._2 lsn
$
したがって、ロックしておらず、データベースをディスクにフラッシュし、常に書き込みが行われている場合は、常にジャーナルファイルがあります。
同様に、mongod
インスタンスをクリーンにシャットダウンすると、ディスクへのフラッシュが正常に完了すると、ジャーナルファイルが削除されます。
ジャーナルファイルを小さくしたい場合は、 --smallfiles
オプション。これにより、3 x1GBファイルではなく3x128MBファイルが提供されます。