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 currentOp e killOp sono 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.