Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Gerencie conexões com pools de conexões

Neste guia, você aprenderá como o driver Ruby usa pools de conexões para gerenciar conexões com o MongoDB deployment e como definir as configurações de pool de conexões em seu aplicação.

Um pool de conexões é um cache de conexões de banco de dados abertas mantidas pelo driver Ruby. Quando seu aplicação solicita uma conexão com o MongoDB, o driver obtém uma conexão do pool sem problemas, executa operações e retorna a conexão ao pool para reutilização.

Os pools de conexões ajudam a reduzir a latência de aplicação e o número de vezes que novas conexões são criadas pelo driver Ruby.

Cada instância Mongo::Client tem um pool de conexões integrado para cada servidor em sua topologia do MongoDB . Se você não configurar a opção min_pool_size, os pools de conexões abrirão conexões sob demanda para oferecer suporte a solicitações simultâneas ao MongoDB em seu aplicação.

Você pode especificar as seguintes configurações do pool de conexões na sua instância do Mongo::Client:

Contexto
Descrição

max_pool_size

O número máximo de conexões simultâneas que o pool mantém. Se o número de conexões em uso com um servidor atingir o valor especificado, a próxima solicitação para esse servidor aguardará até que uma conexão se torne disponível. Definir esta opção como 0 cria um pool de conexões ilimitado.

Padrão: 100

max_connecting

O número máximo de conexões que cada pool pode estabelecer simultaneamente.

Padrão: 2

min_pool_size

O número mínimo de conexões simultâneas que o pool mantém.

Padrão: 0

max_idle_time

O número máximo de segundos que uma conexão pode permanecer inativa no pool.

Padrão: 0 (sem limite)

Além das conexões necessárias para dar suporte às solicitações do seu aplicativo, cada instância Mongo::Client abre até duas conexões por servidor em sua topologia MongoDB para monitorar o estado do servidor.

Por exemplo, um cliente conectado a um conjunto de réplicas de três nós abre seis conexões de monitoramento. Se o aplicação usar a configuração padrão para max_pool_size e consultar somente o nó primário (padrão), poderá haver no máximo 106 conexões abertas e 100 conexões no pool de conexões. Se o aplicação usar uma preferência de leitura para consultar os nós secundários, essas pools de conexões crescerão e poderá haver um total de 306 conexões, incluindo as conexões de monitoramento abertas.

Para dar suporte a um grande número de solicitações simultâneas do MongoDB em um processo, você pode aumentar max_pool_size.

O seguinte código cria uma instância do Mongo::Client com um tamanho máximo do pool de conexões de 200 especificando a opção max_pool_size no objeto options :

require 'mongo'
uri = "<connection-string>"
client = Mongo::Client(uri, {
max_pool_size: 200
})

Estabelecimento de conexão com limite de taxa de pools de conexões. A opção max_connecting determina o número de conexões que o grupo pode criar em paralelo a qualquer momento. Por exemplo, se o valor de max_connecting for 2, a terceira solicitação que tenta fazer check-out simultâneo de uma conexão terá êxito somente quando ocorrer um dos seguintes casos:

  • O pool de conexões termina de criar uma conexão e há menos de max_pool_size conexões no pool.

  • Uma conexão existente é verificada novamente no pool.

O código a seguir cria uma instância Mongo::Client com um número máximo de conexões 2 a serem estabelecidas simultaneamente por pool, especificando a opção max_connecting no objeto options :

require 'mongo'
uri = "<connection-string>"
client = Mongo::Client(uri, {
max_connecting: 2
})

Você pode configurar o número mínimo de conexões para cada servidor com a opção min_pool_size. O driver garante que sempre haja pelo menos o número de conexões definidas pela opção min_pool_size no pool de conexões. Se as conexões forem fechadas, fazendo com que o número total de conexões (em uso e ociosas) caia abaixo do mínimo, o driver abrirá mais conexões até que o mínimo seja atingido.

O seguinte código cria uma instância do Mongo::Client com um tamanho mínimo do pool de conexões de 10 especificando a opção min_pool_size no objeto options :

require 'mongo'
uri = "<connection-string>"
client = Mongo::Client(uri, {
min_pool_size: 10
})

Observação

Um Mongo::Client configurado com max_idle_time e min_pool_size definido como 0 é ideal para volumes de trabalho com períodos sustentados de baixa atividade. Essa configuração permite que o pool de conexões feche conexões não utilizadas durante períodos de inatividade.

Você pode definir o número máximo de milésimos de segundo em que uma conexão pode permanecer ociosa no pool definindo a opção max_idle_time. Depois que uma conexão fica inativa por max_idle_time, o pool de conexões a remove e a substitui. O padrão desta opção é 0 (sem limite).

O código a seguir cria uma instância Mongo::Client com um tempo ocioso máximo de 10000 milissegundos (10 segundos), especificando a configuração max_idle_time no objeto options :

require 'mongo'
uri = "<connection-string>"
client = Mongo::Client(uri, {
max_idle_time: 10000
})

Quando qualquer solicitação chama Mongo::Client.close(), o driver Ruby executa as seguintes ações:

  • Fecha todas as conexões ociosas no pool de conexões

  • Fecha todas as conexões que estão em uso à medida que são retornadas ao pool

  • Fecha todas as conexões que estão em uso somente quando as operações associadas são concluídas

A chamada de Mongo::Client.close() fecha apenas conexões inativas e não encerra diretamente nenhuma operação em andamento.

Observação

O método Mongo::Client.close() fecha sessões e transações existentes, o que pode afetar indiretamente o comportamento de operações em andamento e abrir cursores.

Ter um grande pool de conexões nem sempre reduz as solicitações de reconexão. Considere o seguinte cenário de exemplo :

  • Um aplicação tem um tamanho de pool de conexões de 5 conexões e tem a opção timeout_ms definida para 5000 milissegundos.

  • As operações ocorrem, em média, a cada 3000 milésimos de segundo, e as solicitações de reconexão são frequentes.

  • Cada conexão atinge o tempo limite após 5000 milésimos de segundo, o que significa que todas as conexões devem fazer algo durante esses 5000 milésimos de segundo para evitar o fechamento.

Nesse cenário, cada conexão atinge o tempo limite após 5000 milissegundos, exigindo atividade dentro desse período de tempo limite para evitar o fechamento. No entanto, uma mensagem a cada 3000 milésimos de segundo não é suficiente para manter todas as conexões ativas, fazendo com que várias delas expirem.

Para evitar tempos limite excessivos de conexão, reduza o número de conexões que o driver pode manter no pool de conexões especificando a opção max_pool_size. Para saber como definir a opção max_pool_size, consulte a seção max_pool_size deste guia.

Para obter mais informações sobre como criar um objeto Mongo::Client com o driver Ruby e especificar opções, consulte a seção Hash de opções da documentação da API Mongo::Client.