Eu tenho um aplicativo que bombeia dados constantemente para o MongoDB. A instância do MongoDB está sendo executada com 2 réplicas, cada uma com volume EBS gp2 de 3 TB.
Como você pode ver no gráfico a seguir de
irate(node_disk_reads_completed_total{}[1m])
irate(node_disk_writes_completed_total{}[1m])
O desempenho de leitura é lento e constante, o que é normal, mas as gravações parecem ter um desempenho inferior.
Mesmo nos picos nunca atingimos 3IOPS/GB teóricos * 3000 GB = 9k IOPS. O aplicativo em si gasta a maior parte do tempo bombeando mais e mais dados para o banco de dados; portanto, da perspectiva do aplicativo, o banco de dados é o gargalo claro.
Então, por que não pode ir mais rápido? E por que é uma onda tão grande? Eu esperaria que a gravação no WAL fornecesse uma fonte constante de atividade de gravação e coisas como fsync periódico no disco não causariam padrões tão extremos de subida e descida.
Será que a sincronização entre réplicas está causando pausas na taxa de transferência? Mas estou usando a preocupação de gravação padrão, que deveria ser w: 1, j: true
e não exigir a espera por réplicas.
Mais alguma coisa que possa estar faltando?