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
currentOpekillOp.
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. |