Por que minha configuração do mongodb não está atingindo o limite de IOPS do EBS?

Por que minha configuração do mongodb não está atingindo o limite de IOPS do EBS?

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])

Gráfico para leitura e gravação no disco

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: truee não exigir a espera por réplicas.

Mais alguma coisa que possa estar faltando?

informação relacionada