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