我有一個應用程式不斷將資料傳輸到 MongoDB。 MongoDB 實例使用 2 個副本運行,每個副本具有 3TB gp2 EBS 磁碟區。
正如您在下圖中看到的
irate(node_disk_reads_completed_total{}[1m])
irate(node_disk_writes_completed_total{}[1m])
讀取效能緩慢且穩定,這是正常的,但寫入似乎表現不佳。
即使在高峰期,我們也永遠無法達到理論上的 3IOPS/GB * 3000 GB = 9k IOPS。應用程式本身花費大部分時鐘時間將越來越多的資料泵入資料庫,因此從應用程式的角度來看,資料庫是明顯的瓶頸。
那為什麼不能走得更快呢?而為什麼會有這樣的浪潮呢?我希望寫入 WAL 將提供恆定的寫入活動來源,並且定期 fsync 到磁碟之類的事情不會真正導致如此極端的上下模式。
副本之間的同步是否會導致吞吐量暫停?但我使用的是預設的寫入關注,它應該w: 1, j: true
並且不需要等待副本。
我可能還缺什麼嗎?