web-dev-qa-db-ja.com

ジャーナリングがオフの場合のMongoDB書き込みの問題

2つのセカンダリを持つmongo 3.4.7(WiredTiger)レプリカセットを実行しています。

docs によると、ジャーナリングが有効で書き込みの懸念がある場合は{w: "majority", j: 0}、データが「メモリ内」に書き込まれた後にackが送信されます。

ただし、ドキュメントでは、ジャーナリングがサーバー上でoffのときに何が起こるかは指定されていません(--nojournal)。その場合はどうなりますか?書き込みの懸念は何を待っていますか?

2
Tzach

WiredTigerでMongoDB 3.4.7を使用しているので、MongoDBをデフォルト値(ジャーナルが有効になっている)で実行すると、特定のデフォルトが設定されます。

ジャーナリングなしでMongoDBを実行する場合は、{w:'majority', j:true}はエラーになります( jオプション の「メモ」セクションを参照):

[PRIMARY:replset] test> db.test.insert({a:1},{writeConcern:{w:'majority', j:true}})
WriteResult({
  "writeError": {
    "code": 2,
    "errmsg": "cannot use 'j' option when a Host does not have journaling enabled"
  }
})

直感に反して、WiredTigerを--nojournalオプションはそれを遅くするかもしれません。これは、WiredTigerが checkpoint を60秒ごとに実行するか、MongoDB 3.4で2 GBのデータを実行し、チェックポイント間でジャーナルに書き込むためです。

ジャーナリングを無効にすると、ジャーナルのフラッシュが強制的にチェックポイントになります。ジャーナルの同期は完全なチェックポイントに比べて比較的軽いため、強制チェックポイントはWiredTigerの速度を低下させます。

1
kevinadi

あなたの質問への答え:ディスクへのデータ変更の書き込み。

ジャーナリングがオンの場合、最初の変更はジャーナルに書き込まれ、次にデータブロックに書き込まれます。

1
JJussi