Menu Docs
Página inicial do Docs
/ /

Solucionar problemas de tempestades de conexão

As tempestades de conexão geralmente aparecem como picos inesperados na contagem de conexões e, com frequência, podem ser diagnósticadas erroneamente como problemas de desempenho do banco de dados.

Esta página aborda as causas comuns e soluções para tempestades de conexão e erros "too many connections". Se precisar de suporte adicional depois de passar pelas seções a seguir, entre em contato com o Suporte técnico.

Para confirmar se sua implantação está enfrentando um problema de tempestade de conexão ou limite de conexão, execute o comando serverStatus e verifique os seguintes indicadores:

Você também pode verificar as mensagens de log de sua implantação em busca de um grande número de mensagens "Connection accepted" com um atributo connectionCount de aumento rápido ou de aumentos nas entradas de log de queries lentas.

Nas implantações do Atlas , você pode navegar até seu cluster na IU do Atlas e selecionar Metrics, então Connections para visualizar gráficos de contagem de conexão ao longo do tempo.

As seções a seguir descrevem causas comuns de tempestades de conexão e como resolvê-las.

Se você definir minPoolSize muito abaixo de maxPoolSize, o driver manterá apenas um pequeno número de conexões ociosas. Sob cargas de trabalho pesadas ou após uma reinicialização, o driver deve abrir rapidamente muitas novas conexões para atingir o tamanho do pool de trabalho, o que pode causar um pico em novas conexões.

Se a latência do servidor ou da query aumentar, as conexões individuais permanecerão ativas por mais tempo. Isso força o driver a abrir conexões adicionais para lidar com as solicitações recebidas, aumentando a contagem total de conexões.

Se você notar um valor de connections.active alto e uma latência de query elevada, defina minPoolSize para um valor mais próximo de maxPoolSize na string de conexão do driver. Isso pré-aquece o pool de conexões e reduz a necessidade de abrir muitas novas conexões sob carga.

Um aumento súbito no tráfego do aplicativo pode esgotar o pool de conexões disponível, forçando o driver a abrir novas conexões rapidamente.

Se você notar picos de conexão que ocorrem com o aumento do tráfego, considere a possibilidade de definir minPoolSize para um valor mais próximo de maxPoolSize na string de conexão do driver. Isso garante que o driver mantenha conexões pré-estabelecidas suficientes para lidar com picos de tráfego sem precisar abrir rapidamente novas conexões.

Interrupções de rede, reinicializações contínuas ou eventos inesperados de dimensionamento do tier de aplicação podem fazer com que as instâncias de aplicação se reconectam simultaneamente, sobrecarregando o servidor com novas solicitações de conexão.

Se ocorrerem picos de conexão durante eventos de implantação ou interrupções de rede, considere configurar o maxPoolSize para limitar o número total de conexões que cada instância do aplicativo pode abrir. Isso limita o impacto de eventos de reconexão simultâneos.

Se você criar um novo MongoClient em cada solicitação ou invocação de função, em vez de reutilizar uma única instância compartilhada, cada cliente poderá abrir seu próprio pool de conexões independente até o maxPoolSize configurado. Em muitas solicitações simultâneas ou ambientes de execução de curta duração, isso multiplica o número total de conexões abertas e pode trigger tempestades de conexões.

Se você notar um aumento constante das contagens de conexões correlacionadas ao volume de solicitações, verifique se seu aplicativo instancia uma nova MongoClient por solicitação e considere implementar MongoClient como uma única instância compartilhada em todas as operações. Isso estabiliza o uso da conexão e evita picos de contagem de conexões causados pela multiplicação do pool.

Em clusters fragmentados, cada mongos mantém pools de conexões em cada fragmento. Se esses pools não forem dimensionados corretamente, uma tempestade de conexão no tier do aplicativo poderá se propagar para o tier do fragmento, à medida que os roteadores abrirem simultaneamente um grande número de conexões internas.

Se você notar tempestades de conexão originadas de processos do mongos, considere:

Cada camada do cluster do Atlas impõe um número máximo de conexões simultâneas de entrada por nó. Quando um aplicativo abre mais conexões do que a camada permite, o cluster pode rejeitar novas solicitações de conexão com o seguinte erro:

connection refused because too many open connections

Se você notar rejeições de conexão que ocorrem com o aumento da carga e não melhoram depois de ajustar as configurações do pool, verifique se connections.current está no limite ou próximo ao limite da camada do cluster. Para visualizar os limites de conexão por camada do cluster, consulte Limites de Serviço do Atlas.

Se a contagem de conexões estiver igual ou próxima ao limite da camada do cluster , considere a possibilidade de atualizar para uma camada do cluster superior para aumentar o limite de conexão por nó. Para dimensionar seu cluster, consulte Modificar um cluster.

Para confirmar que a tempestade de conexões foi resolvida:

  • Execute serverStatus novamente e verifique se connections.current retornou aos níveis esperados em relação a connections.available.

  • Confirme que seus registros mongod ou mongos não mostram mais erros relacionados à conexão.

  • Nas implantações do Atlas, confirme se o grafo de contagem de conexões na visualização do Atlas Metrics retornou à linha de base.

Se o problema persistir, entre em contato com o Suporte técnico. Antes de entrar em contato com o suporte, reúna as seguintes informações:

  • Saída de db.serverStatus()

  • Trechos de registro de mongod ou mongos que mostram erros ou avisos relacionados à conexão

  • Sua string de conexão de driver, especificamente com os valores de maxPoolSize, minPoolSize e waitQueueTimeoutMS

  • Para implantações do Atlas, inclua:

    • O número de instâncias do aplicativo e sua topologia de implantação

    • Uma captura de tela do grafo Atlas Connections durante o período em que o problema ocorreu

Voltar

Ajuste de desempenho

Nesta página