Wie funktioniert das ADO.Net-Verbindungspooling?

Eine Verbindung zu einer Datenbank ist eine ressourcenintensive Operation, die normalerweise einige Schritte umfasst. Ein Kommunikationskanal zwischen der Anwendung und der Datenbank sollte eingerichtet werden, bevor der erste Handshake mit dem Datenbankserver erfolgen kann. Dieser Kanal kann entweder ein Socket oder eine Named Pipe sein. Sobald diese Verbindung hergestellt ist und der erste Handshake mit dem Server erfolgreich ist, werden die Verbindungsmetadaten (Verbindungszeichenfolgeninformationen zum Herstellen einer Verbindung zur Datenbank) analysiert und die Verbindung zur Datenbank vom Datenbankserver authentifiziert.

ADO.Net ist seit langem eines der beliebtesten Datenzugriffs-Frameworks. Das Verbindungspooling ist eine Funktion in ADO.Net, mit der Sie die Datenzugriffsleistung in Ihrer Anwendung verbessern können.

Was ist Verbindungspooling?

Das Verbindungspooling ist eine Strategie, mit der die Kosten für das Öffnen und Schließen von Verbindungen zur Datenbank minimiert werden. Sie können Verbindungen wiederverwenden, anstatt neue Verbindungen zur Datenbank zu erstellen, sobald diese angefordert werden.

Ein Verbindungspool enthält eine Sammlung von inaktiven, offenen und wiederverwendbaren Verbindungen. Der Pooler verwaltet den Verbindungspool und verwaltet eine Reihe aktiver Verbindungen für die angegebenen Verbindungsmetadaten sowie die Verbindungskonfigurationsinformationen.

Beachten Sie, dass in derselben Anwendungsdomäne mehrere Verbindungspools vorhanden sein können. Ein Verbindungspool wird pro eindeutiger Verbindungszeichenfolge erstellt, mit der Sie eine Verbindung zur Datenbank herstellen, und nicht pro Datenbank. Wenn Sie also zum ersten Mal eine Verbindung zu einer Datenbank mit einer bestimmten Verbindungszeichenfolge herstellen, wird ein neuer Verbindungspool erstellt. Wenn Sie beim nächsten Mal eine Verbindung mit derselben Datenbank mit derselben Verbindungszeichenfolge herstellen, wird kein neuer Verbindungspool erstellt, sondern der vorhandene Verbindungspool wird wiederverwendet.

Es ist zu beachten, dass bei Verwendung von Integrated Security für jeden Benutzer, der auf das Client-System zugreift, ein Verbindungspool erstellt wird, dh die Verbindungen werden gemäß Windows-Identität zusammengefasst. In diesem Zusammenhang heißt es im MSDN: "Wenn eine Verbindung zum ersten Mal geöffnet wird, wird ein Verbindungspool basierend auf einem exakten Übereinstimmungsalgorithmus erstellt, der den Pool mit der Verbindungszeichenfolge in der Verbindung verknüpft. Jeder Verbindungspool ist einer bestimmten Verbindungszeichenfolge zugeordnet. Wenn eine neue Verbindung geöffnet wird und die Verbindungszeichenfolge nicht genau mit einem vorhandenen Pool übereinstimmt, wird ein neuer Pool erstellt. "

Verbindungspooling konfigurieren

Wie steuern Sie das Verhalten beim Verbindungspooling? Nun, Sie können Verbindungspools mit bestimmten Schlüsselwörtern in Ihrer Verbindungszeichenfolge verwalten. Die wichtigsten sind:

  • ConnectionTimeout - Hiermit wird die Wartezeit (in Sekunden) angegeben, für die eine neue Datenbankverbindung angefordert wird. Der Standardwert ist 15.
  • MinPoolSize - Dies ist die Mindestanzahl von Verbindungen im Pool.
  • MaxPoolSize - Dies ist die maximale Anzahl von Verbindungen im Pool. Der Standardwert ist 100.
  • Pooling - Hiermit wird gesteuert, ob das Verbindungspooling aktiviert oder deaktiviert ist und den Wert true oder false haben kann. Wenn dies auf true gesetzt ist, wird die angeforderte Verbindung aus dem entsprechenden Verbindungspool abgerufen.

Das folgende Codeausschnitt zeigt, wie der Verbindungspool mithilfe der Verbindungszeichenfolge konfiguriert werden kann:

string connectionString="Data Source=localhost;Initial Catalog=Sample; Integrated security=SSPI;Connection Timeout=30; Connection Lifetime=0;Min Pool Size=0;Max Pool Size=100;Pooling=true;";

using (SqlConnection connection = new SqlConnection(connectionString))

{

   connection.Open();

   //Write code here to perform CRUD operations on the Sample database

}

Sie können das Verhalten beim Verbindungspooling überwachen, indem Sie die gespeicherten Prozeduren sp_who oder sp_who2 in SQL Server ausführen. Sie können auch den SQL Server Profiler verwenden oder Leistungsindikatoren verwenden, um das Verhalten beim Verbindungspooling zu überwachen.

Es gibt einige potenzielle Probleme beim Verbindungspooling. Ein solches Problem ist die Poolfragmentierung. Wenn Sie mit Verbindungspooling arbeiten, sollten Sie sich der Poolfragmentierung bewusst sein und sicherstellen, dass geeignete Maßnahmen (Ihre Architektur sollte so ausgelegt sein, dass Strategien zur Reduzierung der Poolfragmentierung berücksichtigt werden) angewendet werden, um eine Poolfragmentierung zu vermeiden. Beachten Sie, dass eine Poolfragmentierung auftreten kann, wenn Sie Integrated Security verwenden oder wenn Ihre Anwendung zu viele Verbindungspools verwendet.

Um sicherzustellen, dass das Verbindungspooling effizient funktioniert, sollten Sie sicherstellen, dass Sie die Datenbankverbindungen schließen, wenn sie nicht mehr benötigt werden. Sie sollten niemals die Close- oder Dispose-Methode für eine Verbindungsinstanz in der Finalize-Methode aufrufen. Sie sollten die Transaktionsinstanzen auch schließen, bevor die zugehörigen Verbindungsobjekte geschlossen oder entsorgt werden. Hier ist eine schöne Lektüre zu diesem Thema.