Gerenciando Conexões

As conexões com sua implementação do Databases for MongoDB usam recursos, por isso, é importante considerar quantas conexões são necessárias ao ajustar o desempenho de sua implementação. Use o seguinte comando no shell MongoDB ou em um cliente MongoDB para mostrar o número máximo de conexões permitidas e o uso atual.

  db.serverStatus().connections

Saída de amostra:

{
  current: 33,
  available: 65503,
  totalCreated: 21858,
  rejected: 0,
  active: 9,
  threaded: 33,
  exhaustIsMaster: 0,
  exhaustHello: 6,
  awaitingTopologyChanges: 6
}
Campo Significado
current: 33 Total de conexões de clientes atuais, incluindo as ociosas. É assim que muitos clientes estão conectados no momento.
available: 65503 O número de conexões adicionais de clientes que o MongoDB pode aceitar antes de atingir o limite (sugerindo um máximo de ~65536).
totalCreated: 21858 Número total de conexões criadas desde o início do servidor. Ajuda você a entender a rotatividade de conexões.
rejected: 0 Número de tentativas de conexão rejeitadas devido ao limite ter sido atingido.
threaded: 78 Número de threads que estão lidando com conexões no momento. Frequentemente corresponde a current.
active: 23 Número de conexões que estão executando operações no momento - o restante (78 - 23 = 55) está ocioso.
exhaustIsMaster: 0 Relacionado a protocolos de descoberta de servidores mais antigos (agora substituídos). Normalmente 0.
exhaustHello: 19 Conexões de monitoramento persistentes (por exemplo, de drivers que usam o comando hello no monitoramento).
awaitingTopologyChanges: 19 Conexões que aguardam alterações na topologia (por exemplo, para monitoramento de alta disponibilidade em conjuntos de réplicas).

Nota:

  • maximum connection = current + available
  • O fato de não haver conexões rejeitadas significa que o limite não foi atingido.
  • Por padrão, o site MongoDB permite até 65536 conexões.
  • Exceder o limite de conexão para sua implementação pode fazer com que seu banco de dados fique inacessível por seus aplicativos.

Terminando conexões MongoDB

Para encerrar (matar) as conexões MongoDB, use a seguinte abordagem, normalmente por meio do shell MongoDB: Execute o seguinte comando para listar as operações ativas, inclusive as conexões.

  db.currentOp(true).inprog

Saída:

{
  "client" : "IP:PORT",
  "active" : true,
  "opid" : <opid>,
  ...
}

Quando você encontrar o endereço opid da operação (por exemplo, opid: 12345), elimine-o usando o seguinte comando:

    db.killOp(12345)
  • São necessários privilégios de administrador para executar currentOp e killOp.

MongoDB pooling de conexões

Um pool de conexões em MongoDB é um cache de conexões reutilizáveis entre seu aplicativo e o servidor MongoDB. Em vez de abrir e fechar uma nova conexão para cada solicitação (o que é caro), o aplicativo mantém um pool de conexões e as reutiliza para várias operações. Uma maneira de evitar exceder o limite de conexão e assegurar que as conexões de seus aplicativos estejam sendo manipuladas de forma eficiente é por meio da definição do conjunto de conexões. O driver gerencia a criação, a reutilização e o fechamento de conexões com base na demanda e na configuração.

Node.js (Mongoose ou driver nativo MongoDB ):

mongoose.connect(uri, {
  maxPoolSize: 100,      // default is 100
  minPoolSize: 10,
  maxIdleTimeMS: 30000,
  serverSelectionTimeoutMS: 5000
});

Python (PyMongo):

client = MongoClient(uri, maxPoolSize=100, minPoolSize=10)

Java:

MongoClientSettings settings = MongoClientSettings.builder()
    .applyToConnectionPoolSettings(builder ->
        builder.maxSize(100).minSize(10).maxConnectionIdleTime(30, TimeUnit.SECONDS))
    .build();
Termo Descrição
maxPoolSize (ou maxConnectionsPerHost) O número máximo de conexões que o pool pode abrir para o servidor MongoDB.
minPoolSize O número mínimo de conexões mantidas no pool.
waitQueueTimeoutMS Quanto tempo o aplicativo espera por uma conexão do pool quando todos estão ocupados.
maxIdleTimeMS Quanto tempo uma conexão pode permanecer ociosa antes de ser fechada.