Mongodb

日誌關閉時的 MongoDB 寫入問題

  • September 18, 2017

我正在執行帶有兩個輔助節點的 mongo 3.4.7 (WiredTiger) 副本集。

根據文件,當啟用日誌並寫入問題時{w: "majority", j: 0},在數據寫入“記憶體中”後發送 ack。

但是,文件沒有指定在伺服器上關閉--nojournal日誌時會發生什麼 ( )。在那種情況下會發生什麼?寫關注在等待什麼?

由於您將 MongoDB 3.4.7 與 WiredTiger 一起使用,因此如果您使用預設值執行 MongoDB(啟用日誌),則存在某些預設值:

如果您在沒有日誌的情況下執行 MongoDB,則 using{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"
 }
})

請注意,與直覺相反,使用該--nojournal選項執行 WiredTiger 可能會使其變慢。這是因為 WiredTiger 在 MongoDB 3.4 中每 60 秒或 2 GB 數據執行一次檢查點,並在檢查點之間寫入日誌。

禁用日誌將強制任何日誌刷新成為檢查點。由於與完整檢查點相比,日誌同步相對輕量級,因此強制檢查點會減慢 WiredTiger。

引用自:https://dba.stackexchange.com/questions/185704