Gestione delle connessioni
Le connessioni all'installazione Databases for MongoDB utilizzano risorse, quindi è importante considerare quante connessioni sono necessarie quando si mettono a punto le prestazioni dell'installazione. Usare il seguente comando nella shell MongoDB o in un client MongoDB per mostrare il numero massimo di connessioni consentite e l'utilizzo attuale.
db.serverStatus().connections
Output di esempio:
{
current: 33,
available: 65503,
totalCreated: 21858,
rejected: 0,
active: 9,
threaded: 33,
exhaustIsMaster: 0,
exhaustHello: 6,
awaitingTopologyChanges: 6
}
| Campo | Significato |
|---|---|
current: 33 |
Totale delle connessioni client attuali, comprese quelle inattive. Questo è il modo in cui molti clienti sono connessi in questo momento. |
available: 65503 |
Il numero di connessioni client aggiuntive che MongoDB può accettare prima di raggiungere il limite (suggerendo un massimo di 65536). |
totalCreated: 21858 |
Numero totale di connessioni create dall'avvio del server. Aiuta a comprendere il churn delle connessioni. |
rejected: 0 |
Numero di tentativi di connessione rifiutati a causa del raggiungimento del limite. |
threaded: 78 |
Numero di thread che gestiscono attualmente le connessioni. Spesso corrisponde a current. |
active: 23 |
Numero di connessioni che stanno eseguendo operazioni - il resto (78 - 23 = 55) è inattivo. |
exhaustIsMaster: 0 |
Relativo ai vecchi protocolli di individuazione dei server (ora sostituiti). Di solito 0. |
exhaustHello: 19 |
Connessioni di monitoraggio persistenti (ad esempio, dai driver che utilizzano il comando hello nel monitoraggio). |
awaitingTopologyChanges: 19 |
Connessioni in attesa di modifiche alla topologia (ad esempio, per il monitoraggio dell'alta disponibilità nei set di replica). |
Nota:
maximum connection=current+available- Nessuna connessione rifiutata significa che il limite non è stato raggiunto.
- Per impostazione predefinita, MongoDB consente fino a 65536 connessioni.
- Il superamento del limite di connessione per l'installazione può causare l'irraggiungibilità del database da parte delle applicazioni.
Terminazione delle connessioni MongoDB
Per terminare (killare) le connessioni a MongoDB, utilizzare il seguente approccio, in genere attraverso la shell MongoDB: Eseguire il seguente comando per elencare le operazioni attive, comprese le connessioni.
db.currentOp(true).inprog
Output:
{
"client" : "IP:PORT",
"active" : true,
"opid" : <opid>,
...
}
Una volta trovato l'indirizzo opid dell'operazione (ad esempio, opid: 12345), eliminatelo con il seguente comando:
db.killOp(12345)
- Per eseguire
currentOpekillOpsono necessari i privilegi di amministratore.
MongoDB pooling delle connessioni
Un pool di connessioni in MongoDB è una cache di connessioni riutilizzabili tra la vostra applicazione e il server MongoDB. Invece di aprire e chiudere una nuova connessione per ogni richiesta (cosa costosa), l'applicazione mantiene un pool di connessioni e le riutilizza per più operazioni. Un modo per evitare di superare il limite di connessione e garantire che le connessioni delle applicazioni siano gestite in modo efficiente è il pooling delle connessioni. Il driver gestisce la creazione, il riutilizzo e la chiusura delle connessioni in base alla richiesta e alla configurazione.
Node.js (Mongoose o driver nativo di 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();
| Termine | Descrizione |
|---|---|
maxPoolSize (o maxConnectionsPerHost) |
Il numero massimo di connessioni che il pool può aprire al server MongoDB. |
| minPoolSize | Il numero minimo di connessioni mantenute nel pool. |
| waitQueueTimeoutMS | Per quanto tempo l'applicazione attende una connessione dal pool quando tutti sono occupati. |
| maxIdleTimeMS | Per quanto tempo una connessione può rimanere inattiva prima di essere chiusa. |