OLE DB-, ODBC- und Oracle-VerbindungspoolingOLE DB, ODBC, and Oracle Connection Pooling

Durch Verbindungspooling kann die Leistung und Skalierbarkeit einer Anwendung wesentlich erhöht werden.Pooling connections can significantly enhance the performance and scalability of your application. In diesem Abschnitt wird das Verbindungspooling für die .NET Framework-Datenanbieter für OLE DB, ODBC und Oracle erläutert.This section discusses connection pooling for the .NET Framework data providers for OLE DB, ODBC and Oracle.

Verbindungspooling für OLE DBConnection Pooling for OleDb

Der .NET Framework-Datenanbieter für OLE DB vereinigt automatisch Verbindungen mithilfe des OLE DB-Sitzungspoolings.The .NET Framework Data Provider for OLE DB automatically pools connections using OLE DB session pooling. Mithilfe von Argumenten für Verbindungszeichenfolgen können OLE DB-Dienste, einschließlich Pooling, aktiviert und deaktiviert werden.Connection string arguments can be used to enable or disable OLE DB services including pooling. Beispielsweise werden mit der folgenden Verbindungszeichenfolge das OLE DB-Sitzungspooling und die automatische Eintragung von Transaktionen deaktiviert.For example, the following connection string disables OLE DB session pooling and automatic transaction enlistment.

Provider=SQLOLEDB;OLE DB Services=-4;Data Source=localhost;Integrated Security=SSPI;  

Es wird empfohlen, nach Abschluss der Verwendung einer Verbindung diese immer zu schließen oder zu verwerfen, um die Verbindung an den Pool zurückzugeben.We recommend that you always close or dispose of a connection when you are finished using it in order to return the connection to the pool. Verbindungen, die nicht explizit geschlossen werden, werden möglicherweise nicht an den Pool zurückgegeben.Connections that are not explicitly closed may not get returned to the pool. Beispielsweise wird eine Verbindung, die sich nicht mehr im Gültigkeitsbereich befindet, aber nicht explizit geschlossen wurde, nur dann an den Verbindungspool zurückgegeben, wenn die maximale Poolgröße erreicht wurde und die Verbindung immer noch gültig ist.For example, a connection that has gone out of scope but that has not been explicitly closed will only be returned to the connection pool if the maximum pool size has been reached and the connection is still valid.

Weitere Informationen zum OLE DB-Sitzungs-oder Ressourcen Pooling sowie zum Deaktivieren des Poolings durch Überschreiben der Standardwerte für den OLE DB Anbieter Dienst finden Sie im OLE DB Programmer es Guide.For more information about OLE DB session or resource pooling, as well as how to disable pooling by overriding OLE DB provider service defaults, see the OLE DB Programmer's Guide.

Verbindungspooling für ODBCConnection Pooling for Odbc

Das Verbindungspooling für .NET Framework-Datenanbieter für ODBC wird von dem für die Verbindung verwendeten ODBC-Treiber-Manager verwaltet und wird nicht vom .NET Framework-Datenanbieter für ODBC beeinflusst.Connection pooling for the .NET Framework Data Provider for ODBC is managed by the ODBC Driver Manager that is used for the connection, and is not affected by the .NET Framework Data Provider for ODBC.

Um das Verbindungspooling zu aktivieren oder zu deaktivieren, öffnen Sie in der Systemsteuerung im Ordnerverwaltung den ODBC-Datenquellen-Administrator .To enable or disable connection pooling, open ODBC Data Source Administrator in the Administrative Tools folder of Control Panel. Auf der Registerkarte Verbindungspooling können Sie Verbindungspooling-Parameter für jeden installierten ODBC-Treiber angeben.The Connection Pooling tab allows you to specify connection pooling parameters for each ODBC driver installed. Beachten Sie, dass im Fall von Verbindungspoolingänderungen für einen bestimmten ODBC-Treiber alle Anwendungen betroffen sind, die diesen ODBC-Treiber verwenden.Note that connection pooling changes for a specific ODBC driver affect all applications that use that ODBC driver.

Verbindungspooling für OracleClientConnection Pooling for OracleClient

Der .NET Framework-Datenanbieter für Oracle stellt das Verbindungspooling für die ADO.NET-Clientanwendung automatisch bereit.The .NET Framework Data Provider for Oracle provides connection pooling automatically for your ADO.NET client application. Sie können auch mehrere Modifizierer für Verbindungszeichenfolgen angeben, um das Verbindungspoolingverhalten zu steuern (siehe "Steuern von Verbindungspooling mit Verbindungszeichenfolgen-Schlüsselwörtern" weiter unten in diesem Thema).You can also supply several connection string modifiers to control connection pooling behavior (see "Controlling Connection Pooling with Connection String Keywords," later in this topic).

Erstellen und Zuweisen von PoolsPool Creation and Assignment

Wenn eine Verbindung hergestellt wird, wird ein Verbindungspool basierend auf einem exakt übereinstimmenden Algorithmus erstellt. Damit wird der Pool der Verbindungszeichenfolge in der Verbindung zugewiesen.When a connection is opened, a connection pool is created based on an exact matching algorithm that associates the pool with the connection string in the connection. Jedem Verbindungspool wird eine eindeutige Verbindungszeichenfolge zugeordnet.Each connection pool is associated with a distinct connection string. Wenn beim Öffnen einer neuen Verbindung die Verbindungszeichenfolge nicht genau mit einem vorhanden Pool übereinstimmt, wird ein neuer Pool erstellt.When a new connection is opened, if the connection string is not an exact match to an existing pool, a new pool is created.

Erstellte Verbindungspools werden erst zerstört, wenn der aktive Prozess beendet wird.Once created, connection pools are not destroyed until the active process ends. Das Beibehalten inaktiver oder leerer Pools verbraucht nur geringe Systemressourcen.Maintaining inactive or empty pools uses very few system resources.

Hinzufügen einer VerbindungConnection Addition

Für jede eindeutige Verbindungszeichenfolge wird ein Verbindungspool erstellt.A connection pool is created for each unique connection string. Wenn ein Pool erstellt wird, werden mehrere Verbindungsobjekte erstellt und dem Pool hinzugefügt wird, sodass die minimalen Anforderungen für die Größe eines Pools erfüllt sind.When a pool is created, multiple connection objects are created and added to the pool so that the minimum pool size requirement is satisfied. Verbindungen werden dem Pool nach Bedarf hinzugefügt, bis die maximale Poolgröße erreicht ist.Connections are added to the pool as needed, up to the maximum pool size.

Wenn ein OracleConnection-Objekt angefordert wird, wird es aus dem Pool abgerufen, wenn eine verwendbare Verbindung verfügbar ist.When an OracleConnection object is requested, it is obtained from the pool if a usable connection is available. Eine Verbindung ist dann verwendbar, wenn sie aktuell nicht verwendet wird, einen übereinstimmenden Transaktionskontext aufweist oder keinem Transaktionskontext zugeordnet ist sowie über eine gültige Verknüpfung zum Server verfügt.To be usable, the connection must currently be unused, have a matching transaction context or not be associated with any transaction context, and have a valid link to the server.

Wenn die maximale Poolgröße erreicht ist und keine verwendbare Verbindung verfügbar ist, wird die Anforderung in die Warteschlange gestellt.If the maximum pool size has been reached and no usable connection is available, the request is queued. Die Verbindungspoolfunktion erfüllt diese Anforderungen, indem Verbindungen erneut zugewiesen werden, sobald sie wieder für den Pool freigegeben werden.The connection pooler satisfies these requests by reallocating connections as they are released back into the pool. Verbindungen werden wieder für den Pool freigegeben, wenn sie geschlossen oder verworfen werden.Connections are released back into the pool when they are closed or disposed.

Entfernen von VerbindungenConnection Removal

Die Verbindungspoolfunktion entfernt eine Verbindung aus dem Pool, nachdem sie für eine längere Zeitspanne nicht verwendet wurde oder wenn festgestellt wird, dass die Verbindung mit dem Server unterbrochen wurde.The connection pooler removes a connection from the pool after it has been idle for an extended period of time, or if the pooler detects that the connection with the server has been severed. Beachten Sie, dass dies nur durch den Versuch, mit dem Server zu kommunizieren, festgestellt werden kann.Note that this can be detected only after attempting to communicate with the server. Wenn eine Verbindung gefunden wird, die nicht mehr mit dem Server verbunden ist, wird sie als ungültig markiert.If a connection is found that is no longer connected to the server, it is marked as invalid. Die Verbindungspoolfunktion durchsucht Verbindungspools in regelmäßigen Abständen nach Objekten, die dem Pool übergeben wurden und als ungültig markiert sind.The connection pooler periodically scans connection pools looking for objects that have been released to the pool and are marked as invalid. Diese Verbindungen werden dann endgültig entfernt.These connections are then permanently removed.

Wenn eine Verbindung zu einem nicht mehr vorhandenen Server besteht, kann diese Verbindung auch ohne dass die Verbindungspoolfunktion die unterbrochene Verbindung gefunden und als ungültig markiert hat aus dem Pool genommen werden.If a connection exists to a server that has disappeared, this connection can be drawn from the pool if the connection pooler has not detected the severed connection and marked it as invalid. In diesem Fall wird eine Ausnahme ausgelöst.When this occurs, an exception is generated. Sie müssen die Verbindung dennoch trennen, um sie an den Pool zurückzugeben.However, you must still close the connection in order to release it back into the pool.

Rufen Sie nicht Close oder Dispose für eine Connection, einen DataReader oder ein anderes verwaltetes Objekt in der Finalize-Methode der Klasse auf.Do not call Close or Dispose on a Connection, a DataReader, or any other managed object in the Finalize method of your class. Geben Sie in einer Finalize-Methode nur nicht verwaltete Ressourcen frei, die der Klasse direkt gehören.In a finalizer, only release unmanaged resources that your class owns directly. Wenn die Klasse keine nicht verwalteten Ressourcen besitzt, definieren Sie in der Klasse keine Finalize-Methode.If your class does not own any unmanaged resources, do not include a Finalize method in your class definition. Weitere Informationen finden Sie unter Garbage Collection.For more information, see Garbage Collection.

TransaktionsunterstützungTransaction Support

Verbindungen werden aus dem Pool entnommen und basierend auf dem Transaktionskontext zugewiesen.Connections are drawn from the pool and assigned based on transaction context. Der Kontext des anfordernden Threads und der zugewiesenen Verbindung müssen übereinstimmen.The context of the requesting thread and the assigned connection must match. Daher wird jeder Verbindungspool tatsächlich in Verbindungen unterteilt, denen kein Transaktionskontext zugeordnet ist, und in N Unterteilungen, die jeweils Verbindungen mit einem bestimmten Transaktionskontext enthalten.Therefore, each connection pool is actually subdivided into connections with no transaction context associated with them, and into N subdivisions that each contain connections with a particular transaction context.

Wenn eine Verbindung geschlossen wird, wird sie an den Pool und an den entsprechenden Teilbereich auf der Grundlage des Transaktionskontexts zurückgegeben.When a connection is closed, it is released back into the pool and into the appropriate subdivision based on its transaction context. Sie können die Verbindung daher trennen, ohne einen Fehler zu generieren, auch wenn eine verteilte Transaktion noch aussteht.Therefore, you can close the connection without generating an error, even though a distributed transaction is still pending. So haben Sie die Möglichkeit, die verteilte Transaktion zu einem späteren Zeitpunkt durchzuführen oder abzubrechen.This allows you to commit or abort the distributed transaction at a later time.

Steuern von Verbindungspooling mit Verbindungszeichenfolgen-SchlüsselwörternControlling Connection Pooling with Connection String Keywords

Die ConnectionString-Eigenschaft des OracleConnection-Objekts unterstützt Schlüssel-Wert-Paare für Verbindungszeichenfolgen, mit denen das Verhalten der Verbindungspoolinglogik angepasst werden kann.The ConnectionString property of the OracleConnection object supports connection string key/value pairs that can be used to adjust the behavior of the connection pooling logic.

In der folgenden Tabelle werden die ConnectionString-Werte beschrieben, die zum Anpassen des Verbindungspoolingverhaltens verwendet werden können.The following table describes the ConnectionString values you can use to adjust connection pooling behavior.

NameName DefaultDefault BeschreibungDescription
Connection Lifetime 00 Wenn eine Verbindung an den Pool zurückgegeben wird, wird die Erstellungszeit mit der aktuellen Zeit verglichen. Wenn diese Zeitspanne (in Sekunden) größer ist als der für die Connection Lifetime angegebene Wert, wird die Verbindung zerstört.When a connection is returned to the pool, its creation time is compared with the current time, and the connection is destroyed if that time span (in seconds) exceeds the value specified by Connection Lifetime. Dies ist hilfreich bei Gruppenkonfigurationen, um einen Lastenausgleich zwischen einem bereits aktiven Server und einem Server zu erzwingen, der gerade erst online gegangen ist.This is useful in clustered configurations to force load balancing between a running server and a server just brought online.

Der Wert 0 (null) bewirkt, dass an den Pool zurückgegebene Verbindungen den maximalen Timeout besitzen.A value of zero (0) will cause pooled connections to have the maximum time-out.
Enlist "true"'true' Im Falle von true wird die Verbindung automatisch von der Poolfunktion im aktuellen Transaktionskontext des Erstellungsthreads aufgelistet, wenn ein Transaktionskontext vorhanden ist.When true, the pooler automatically enlists the connection in the current transaction context of the creation thread if a transaction context exists.
Max Pool Size 100100 Die maximale Anzahl der im Pool zulässigen Verbindungen.The maximum number of connections allowed in the pool.
Min Pool Size 00 Die minimale Anzahl der im Pool beibehaltenen Verbindungen.The minimum number of connections maintained in the pool.
Pooling "true"'true' Im Falle von true wird die Verbindung aus dem entsprechenden Pool entnommen oder bei Bedarf erstellt und dem entsprechenden Pool hinzugefügt.When true, the connection is drawn from the appropriate pool, or if necessary, created and added to the appropriate pool.

Siehe auchSee also