IBM Cloud Docs
Verbindungen verwalten

Verbindungen verwalten

Verbindungen zu Ihrer Databases for MongoDB- Bereitstellung verwenden Ressourcen. Daher ist zu bedenken, wie viele Verbindungen Sie benötigen, wenn Sie die Leistung Ihrer Bereitstellung optimieren. Verwenden Sie den folgenden Befehl in der Shell MongoDB oder einem MongoDB-Client, um die maximale Anzahl der zulässigen Verbindungen und die aktuelle Auslastung anzuzeigen.

  db.serverStatus().connections

Beispielausgabe:

{
  current: 33,
  available: 65503,
  totalCreated: 21858,
  rejected: 0,
  active: 9,
  threaded: 33,
  exhaustIsMaster: 0,
  exhaustHello: 6,
  awaitingTopologyChanges: 6
}
Feld Bedeutung
current: 33 Gesamtzahl der aktuellen Client-Verbindungen, einschließlich der Leerlaufverbindungen. So sind viele Kunden im Moment verbunden.
available: 65503 Die Anzahl der zusätzlichen Client-Verbindungen, die MongoDB annehmen kann, bevor das Limit erreicht wird (empfohlen wird ein Maximum von ~65536).
totalCreated: 21858 Gesamtzahl der Verbindungen, die seit dem Start des Servers hergestellt wurden. Hilft Ihnen, die Verbindungsabbrüche zu verstehen.
rejected: 0 Anzahl der abgelehnten Verbindungsversuche, weil das Limit erreicht wurde.
threaded: 78 Anzahl der Threads, die derzeit Verbindungen bearbeiten. Oft passt current.
active: 23 Anzahl der Verbindungen, auf denen derzeit Operationen laufen - der Rest (78 - 23 = 55) ist im Leerlauf.
exhaustIsMaster: 0 Bezieht sich auf ältere Servererkennungsprotokolle (jetzt ersetzt). Normalerweise 0.
exhaustHello: 19 Dauerhafte Überwachungsverbindungen (z. B. von Treibern, die den Befehl hello in der Überwachung verwenden).
awaitingTopologyChanges: 19 Verbindungen, die auf Topologieänderungen warten (z. B. für die Hochverfügbarkeitsüberwachung in Replikatsätzen).

Hinweis:

  • maximum connection = current + available
  • Keine abgelehnten Verbindungen bedeutet, dass das Limit nicht erreicht wird.
  • Standardmäßig lässt MongoDB bis zu 65536 Verbindungen zu.
  • Das Überschreiten des Verbindungslimits für Ihre Bereitstellung kann dazu führen, dass Ihre Datenbank von Ihren Anwendungen nicht erreicht werden kann.

Abschluss von Verbindungen MongoDB

Um MongoDB-Verbindungen zu beenden (kill), verwenden Sie den folgenden Ansatz, normalerweise über die Shell MongoDB: Führen Sie den folgenden Befehl aus, um die aktiven Vorgänge, einschließlich der Verbindungen, aufzulisten.

  db.currentOp(true).inprog

Ausgabe:

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

Sobald Sie die opid der Operation gefunden haben (z. B. opid: 12345), beenden Sie sie mit dem folgenden Befehl:

    db.killOp(12345)
  • Für die Ausführung von currentOp und killOp sind Admin-Rechte erforderlich.

MongoDB pooling von Verbindungen

Ein Verbindungspool in MongoDB ist ein Cache für wiederverwendbare Verbindungen zwischen Ihrer Anwendung und dem MongoDB Server. Anstatt für jede Anfrage eine neue Verbindung zu öffnen und zu schließen (was teuer ist), unterhält die Anwendung einen Pool von Verbindungen und verwendet diese für mehrere Vorgänge wieder. Eine Möglichkeit, das Überschreiten des Verbindungslimits zu verhindern und sicherzustellen, dass die Verbindungen von Ihren Anwendungen effizient gehandhabt werden, ist das Verbindungspooling. Der Treiber verwaltet die Erstellung, Wiederverwendung und Schließung von Verbindungen je nach Bedarf und Konfiguration.

Node.js (Mongoose oder nativer MongoDB Treiber):

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();
term Beschreibung
maxPoolSize (oder maxConnectionsPerHost) Die maximale Anzahl der Verbindungen, die der Pool zum Server MongoDB öffnen kann.
minPoolSize Die Mindestanzahl der im Pool gehaltenen Verbindungen.
waitQueueTimeoutMS Wie lange die Anwendung auf eine Verbindung aus dem Pool wartet, wenn alle belegt sind.
maxIdleTimeMS Wie lange eine Verbindung im Leerlauf bleiben kann, bevor sie geschlossen wird.