web-dev-qa-db-ja.com

なぜジャーナリングはmongodbでこれほど多くのスペースを使用するのですか?

約1GBのスペースを使用するmongodbデータベースがあります。サーバーの容量が足りなくなったときに驚いたのですが、ジャーナルが3GBを使用していることに気づきました。

documentation は、「MongoDBがジャーナルファイルのすべての書き込み操作を適用すると、これらのファイルを削除する」と述べていますが、データベースが同期され、ジャーナリングが3回行われるため、そうではないようです。データベース全体よりも大きい。

これらのジャーナリングファイルを削除して、使用するスペースを減らすようにシステムを構成するにはどうすればよいですか?

7
lfagundes

引用したドキュメントは正しいです。 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ファイルが提供されます。

3
Adam C