我有一个应用程序不断将数据泵送到 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
不需要等待副本。
我可能还遗漏了什么吗?