Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 20385|Antwort: 0

[Quelle] ADO.NET Tutorial (5) Erklären Sie den Datenbank-Verbindungspool im Detail

[Link kopieren]
Veröffentlicht am 17.09.2016 15:41:28 | | | |
Zusammenfassung
Heute werde ich über Datenbank-Verbindungspools sprechen. Um ehrlich zu sein, habe ich gesagt, dass die Entenbirne sehr groß ist. Weil Verbindungspools im Vergleich zu anderen Kapiteln relativ schwer zu verstehen sind. Ich möchte es dir in den beliebtesten Sätzen erklären, aber es ist keine leichte Aufgabe. Verbindungspools sind jedoch auch ein sehr wichtiger Wissenspunkt, insbesondere bei der Bereitstellung von Mehrbenutzerprogrammen. Deshalb muss ich nicht nur sprechen, sondern auch gründlich sprechen. In diesem Artikel verstehen Sie die Grundlagen des Connection Poolings und wie es bereits genutzt wird, um die Leistung Ihrer Anwendung zu verbessern.

Inhaltsverzeichnis
Was ist ein Verbindungspool?
Wie der Verbindungspool funktioniert
Sprechen wir über einige sehr wichtige Eigenschaften von Verbindungspools
Verbindungspool-Ausnahmen und Behandlungsmethoden
Eine Möglichkeit, den Status Ihrer Verbindung zu überwachen
Grundprinzipien für die effiziente Nutzung von Verbindungspools
1. Was ist ein Verbindungspool?
      Im vorherigen Artikel "ADO.NET You Must Know (4) Taste Connection Objects" habe ich betont, dass die Einrichtung einer Datenbankverbindung eine sehr zeitaufwändige (zeitaufwändige) und arbeitsintensive (ressourcenintensive) Aufgabe ist. Dies liegt daran, dass die Verbindung zu einem Datenbankserver mehrere langwierige Prozesse umfasst: das Einrichten eines physischen Kanals (wie einen Socket oder eine benannte Pipeline), ein erstes Handshake mit dem Server, die Analyse der Verbindungsstring-Informationen, die Authentifizierung der Verbindung durch den Server, eine Überprüfung zur Registrierung in der aktuellen Transaktion durchführen und so weiter. Unabhängig davon, warum es einen solchen Mechanismus gibt, gibt es immer einen Existenzgrund. Da es so schmerzhaft ist, eine neue Verbindung zu schaffen, warum nicht eine bestehende wiederverwenden?

      Tatsächlich gibt uns ADO.NET bereits eine Optimierungsmethode namens Connection Pooling. Ein Connection Pool ist ein solcher Container: Er beherbergt eine bestimmte Anzahl physischer Verbindungen zum Datenbankserver. Daher müssen wir, wenn wir uns mit dem Datenbankserver verbinden müssen, nur eine freie Verbindung aus dem Pool (Container) entfernen, anstatt eine neue zu erstellen. Dies reduziert den Aufwand für die Verbindung zur Datenbank erheblich, was die Leistung der Anwendung verbessert.

PS:本来做了2张图片来描述连接池的,无奈公司装有监控软件,不能上传,所以只能等下次有时间上传了。



2. Wie der Verbindungspool funktioniert
2.1 Erstellen eines Verbindungspools
      Es sollte beachtet werden, dass Verbindungspools klassensensitiv sind. Das heißt, dieselbe Anwendungsdomäne kann gleichzeitig mehrere verschiedene Arten von Verbindungspools haben. Wie werden also Verbindungspools identifiziert? Im Detail unterscheidet es sich durch die Signatur, die den Prozess bildet, die Anwendungsdomäne, die Verbindungszeichenkette und die Windows-Identität (bei Verwendung integrierter Sicherheit). Für dieselbe Anwendungsdomäne wird sie jedoch in der Regel nur durch die Verbindungszeichenkette identifiziert. Wenn eine Verbindung geöffnet wird, wird ein neuer Verbindungspool erstellt, wenn die Typsignatur der Stripverbindung nicht mit dem Typ des bestehenden Verbindungspools übereinstimmt. ansonsten wird kein neuer Verbindungspool erstellt.

      Ein typisches Beispiel für die Schaffung einer Verbindung:


Im obigen Fall habe ich drei SqlConnection-Objekte erstellt, aber es wurden nur zwei Verbindungspools benötigt, um sie zu verwalten. Vorsichtige Freunde, ihr habt vielleicht schon festgestellt, dass conn1 und conn3 denselben Verbindungsstring haben, sodass sie einen Verbindungspool teilen können, während conn2 und conn1 sich von conn3 unterscheiden, weshalb ihr einen neuen Verbindungspool erstellen müsst.

2.2 Zuweisung von Leerlaufverbindungen
      Wenn ein Benutzer eine Verbindungsanfrage erstellt oder das Open of a Connection-Objekt aufruft, muss der Connection Pool-Manager zunächst einen Verbindungspool des passenden Typs basierend auf der Typsignatur der Verbindungsanfrage finden und dann versuchen, eine freie Verbindung zuzuweisen. Die Details sind wie folgt:

Wenn eine Verbindung im Pool verfügbar ist, geben Sie die Verbindung zurück.
Wenn alle Verbindungen im Pool erschöpft sind, erstelle eine neue Verbindung, die du dem Pool hinzufügen kannst.
Wenn die maximale Anzahl von Verbindungen im Pool erreicht wurde, tritt die Anfrage in die Warteschlange ein, bis freie Verbindungen verfügbar sind.
2.3 Ungültige Verbindungen entfernen
      Ungültige Verbindungen, also Verbindungen, die sich nicht korrekt mit dem Datenbankserver verbinden. Für Verbindungspools ist die Anzahl der zum Datenbankserver gespeicherten Verbindungen begrenzt. Daher wird Platz im Verbindungspool verschwendet, wenn ungültige Verbindungen rechtzeitig nicht entfernt werden. Tatsächlich müssen Sie sich keine Sorgen machen, der Poolmanager der Verbindung hat diese Probleme für uns sehr gut gelöst. Wenn eine Verbindung über längere Zeit ungenutzt ist oder erkennt, dass die Verbindung zum Server getrennt ist, entfernt der Connection Pool Manager die Verbindung aus dem Pool.

2.4 Gebrauchte Verbindungen recyceln
      Wenn wir eine Verbindung beendet haben, sollten wir sie rechtzeitig schließen oder freigeben, damit die Verbindung zur Wiederverwendung in den Pool zurückgegeben werden kann. Wir können die Verbindung über die Close- oder Disposose-Methode des Connection-Objekts oder durch die Using-Anweisung in C# schließen.



3. Erzählen Sie mir von einigen sehr wichtigen Eigenschaften
Das Verhalten des Verbindungspools kann durch Verbindungsstrings gesteuert werden und umfasst hauptsächlich vier wichtige Eigenschaften:

Verbindungs-Timeout: Die Zeit, in der die Verbindungsanfrage auf eine Auszeit warten muss. Standardmäßig sind 15 Sekunden in Sekunden.
Maximale Poolgröße: Die maximale Anzahl von Verbindungen im Verbindungspool. Der Standard ist 100.
Min. Poolgröße: Die Mindestanzahl der Verbindungen im Verbindungspool. Der Standard ist 0.
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。
Nehmen wir ein Beispiel, um die Eigenschaften des Verbindungspools zu verstehen. Der Code lautet wie folgt:

4. Verbindungspool-Ausnahmen und Behandlungsmethoden
      Wenn ein Benutzer eine Verbindung öffnet, ohne sie korrekt oder rechtzeitig zu schließen, löst dies oft das "Verbindungsleck"-Problem aus. Die geleakte Verbindung bleibt offen, bis die Entsorgungsmethode aufgerufen wird, und der Garbage Collector (GC) schließt und löst die Verbindung. Im Gegensatz zu ADO müssen ADO.NET genutzte Verbindungen manuell schließen. Ein wichtiger Mythos ist, dass die Verbindung geschlossen ist, wenn das verbundene Objekt außerhalb des lokalen Bereichs liegt. Tatsächlich wird außerhalb des Umfangs nur das Verbindungsobjekt freigegeben, nicht die Verbindungsressource. Schauen wir uns zuerst ein Beispiel an.

Um die Ergebnisse deutlicher zu machen, habe ich die maximale Anzahl der Verbindungen speziell auf 5 gesetzt, und die Auszeitzeit beträgt 1 Sekunde. Nach dem Laufen werden folgende Ergebnisse schnell erzielt.


Aus den obigen Ergebnissen ist klar, dass eine Anomalie in der Verbindung vorliegt. Wir wissen bereits, dass die maximale Anzahl der Verbindungen im Verbindungspool 5 beträgt, und wenn die sechste Verbindung erstellt wird, muss auf die Verbindung warten, bis sie auszeitt, weil die maximale Anzahl der Verbindungen im Verbindungspool die maximale Anzahl erreicht hat und keine freien Verbindungen mehr vorhanden sind. Wenn die Auszeitzeit überschritten wird, erscheint die oben erwähnte Verbindungsausnahme. Daher muss ich erneut betonen, dass benutzte Verbindungen so schnell wie möglich ordnungsgemäß geschlossen und freigegeben werden sollten.



5. Methoden zur Überwachung des Status von SQL-Server-Verbindungen
(1) Über den Aktivitätsmonitor
Schritt 1: Öffnen Sie den MSSMS Manager und klicken Sie auf das Symbol "Activity Monitor".



Schritt 2: Klicken Sie in der Ansicht "Aktivitätsmonitor öffnen" auf den Reiter Prozesse.



Schritt 3: Führe das Beispiel in #4 Connection Pool Exceptions and Handling Methods aus, du kannst die 5 offenen Verbindungen sehen, wie in der untenstehenden Abbildung gezeigt.



(2) Verwendung von T-SQL-Anweisungen
Ebenso können wir durch die Ausführung der systemgespeicherten Prozedur sp_who auch den Zustand der Verbindung überwachen.






6. Grundprinzipien für die effiziente Nutzung von Verbindungspools
      Eine gute Nutzung des Verbindungspools verbessert die Leistung Ihrer Anwendung erheblich. Im Gegenteil, wenn es falsch verwendet wird, richtet es keinen Schaden an. Im Allgemeinen sollten folgende Prinzipien befolgt werden:

Beantragen Sie eine Verbindung so spätestens wie möglich, lösen Sie die Verbindung so schnell wie möglich auf.
Wenn Sie die Verbindung schließen, schließen Sie zuerst die relevante, benutzerdefinierte Transaktion.
Stellen Sie mindestens eine offene Verbindung im Verbindungspool sicher.
Versuche, Poolreste zu vermeiden. Dies umfasst hauptsächlich Poolfragmentierung, die durch integrierte Sicherheit erzeugt wird, sowie Poolfragmentierung, die durch die Nutzung vieler Datenbanken generiert wird.
Tipp: Poolfragmentierung ist ein häufiges Problem in vielen Webanwendungen, und Anwendungen können eine große Anzahl von Pools erstellen, die erst freigegeben werden, wenn der Prozess abgeschlossen ist. Auf diese Weise werden viele Verbindungen geöffnet, was viel Speicher beansprucht und zu einer verminderten Leistung führt.





Vorhergehend:.net/c# generiert zufällige Zahlen, benutzerdefinierte Buchstaben- und Zahlenzahlen
Nächster:Wie setze ich HttpOnly für Cookies ein? Wofür wird HttpOnly verwendet?
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com