Regroupement de connexions OLE DB, ODBC et Oracle ConnectionOLE DB, ODBC, and Oracle Connection Pooling

Le regroupement de connexions peut considérablement améliorer les performances et l'évolutivité de votre application.Pooling connections can significantly enhance the performance and scalability of your application. Cette section traite du regroupement de connexions pour les fournisseurs de données .NET Framework pour OLE DB, ODBC et Oracle.This section discusses connection pooling for the .NET Framework data providers for OLE DB, ODBC and Oracle.

Regroupement de connexions pour OleDbConnection Pooling for OleDb

Le fournisseur de données .NET Framework pour OLE DB regroupe automatiquement les connexions utilisant le regroupement de sessions OLE DB.The .NET Framework Data Provider for OLE DB automatically pools connections using OLE DB session pooling. Les arguments string de connexion peuvent être utilisés pour activer ou désactiver les services OLE DB et notamment le regroupement.Connection string arguments can be used to enable or disable OLE DB services including pooling. La chaîne de connexion suivante, par exemple, désactive le regroupement de sessions OLE DB et l'inscription automatique des transactions.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;  

Il est recommandé de toujours fermer ou supprimer une connexion lorsque vous avez fini de l'utiliser afin de retourner la connexion au pool.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. Les connexions qui ne sont pas explicitement fermées risquent de ne pas être retournées au pool.Connections that are not explicitly closed may not get returned to the pool. Par exemple, une connexion devenue hors de portée mais qui n'a pas été explicitement fermée sera retournée au pool de connexion seulement si la taille maximale de celui-ci a été atteinte et si la connexion est toujours valide.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.

Pour plus d’informations sur la OLE DB la session ou le regroupement de ressources, ainsi que sur la façon de désactiver le regroupement en remplaçant OLE DB valeurs par défaut du service fournisseur, consultez le Guide du programmeur OLE DB.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.

Regroupement de connexions pour OdbcConnection Pooling for Odbc

Le regroupement de connexions du fournisseur de données .NET Framework pour ODBC est géré par le gestionnaire de pilotes ODBC utilisé pour la connexion et n'est pas affecté par le fournisseur de données .NET Framework pour ODBC.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.

Pour activer ou désactiver le regroupement de connexions, ouvrez l’administrateur de la source de données ODBC dans le dossier Outils d’administration du panneau de configuration.To enable or disable connection pooling, open ODBC Data Source Administrator in the Administrative Tools folder of Control Panel. L’onglet regroupement de connexions vous permet de spécifier des paramètres de regroupement de connexions pour chaque pilote ODBC installé.The Connection Pooling tab allows you to specify connection pooling parameters for each ODBC driver installed. Notez que les modifications apportées au regroupement de connexions d'un pilote ODBC affectent toutes les applications qui utilisent ce pilote.Note that connection pooling changes for a specific ODBC driver affect all applications that use that ODBC driver.

Regroupement de connexions pour OracleClientConnection Pooling for OracleClient

Le fournisseur de données .NET Framework pour Oracle assure automatiquement le regroupement de connexions pour votre application cliente ADO.NET.The .NET Framework Data Provider for Oracle provides connection pooling automatically for your ADO.NET client application. Vous pouvez aussi fournir plusieurs modificateurs de chaîne de connexion afin de contrôler le comportement du pool de connexions (voir la section sur le contrôle des pools de connexions avec les mots clés des chaînes de connexion, plus loin dans cette rubrique).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).

Création et assignation d'un poolPool Creation and Assignment

Lorsqu'une connexion est ouverte, un pool de connexions est créé sur la base d'un algorithme à correspondance exacte qui associe le pool à la chaîne de connexion dans la connexion.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. Chaque pool de connexions est associé à une chaîne de connexion distincte.Each connection pool is associated with a distinct connection string. Lorsqu'une nouvelle connexion est ouverte, si la chaîne de connexion ne correspond pas exactement à un pool existant, un nouveau pool est créé.When a new connection is opened, if the connection string is not an exact match to an existing pool, a new pool is created.

Une fois créés, les pools de connexions ne sont détruits qu’à la fin du processus actif.Once created, connection pools are not destroyed until the active process ends. La maintenance des pools inactifs ou vides requiert très peu de ressources système.Maintaining inactive or empty pools uses very few system resources.

Ajout de connexionsConnection Addition

Un pool de connexions est créé pour chaque chaîne de connexion unique.A connection pool is created for each unique connection string. Lorsqu'un pool est créé, plusieurs objets de connexion sont créés et ajoutés au pool de sorte que l'exigence de taille minimale du pool soit remplie.When a pool is created, multiple connection objects are created and added to the pool so that the minimum pool size requirement is satisfied. Les connexions sont ajoutées au pool jusqu'à ce que sa taille maximale soit atteinte.Connections are added to the pool as needed, up to the maximum pool size.

Quand un objet OracleConnection est demandé, il est obtenu du pool si une connexion utilisable est disponible.When an OracleConnection object is requested, it is obtained from the pool if a usable connection is available. Pour être utilisable, la connexion ne doit pas être en cours d’utilisation, avoir un contexte de transaction correspondant ou ne pas être associée à un contexte de transaction et avoir un lien valide vers le serveur.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.

Si la taille maximale du pool est atteinte et qu'aucune connexion utilisable n'est disponible, la requête est mise en attente.If the maximum pool size has been reached and no usable connection is available, the request is queued. Le dispositif de regroupement répond à ces requêtes en réallouant les connexions à mesure qu’elles se libèrent.The connection pooler satisfies these requests by reallocating connections as they are released back into the pool. Les connexions sont libérées et retournées au pool en cas de fermeture ou de suppression.Connections are released back into the pool when they are closed or disposed.

Suppression des connexionsConnection Removal

Le dispositif de regroupement de connexions supprime une connexion du pool restée inactive pendant une période prolongée ou s'il détecte que la connexion au serveur a été interrompue.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. Notez que cela ne peut être détecté qu'après une tentative de communication avec le serveur.Note that this can be detected only after attempting to communicate with the server. Si une connexion n'est plus reliée au serveur, elle est marquée comme étant non valide.If a connection is found that is no longer connected to the server, it is marked as invalid. Le dispositif de regroupement analyse périodiquement les pools de connexions à la recherche d’objets qui ont été libérés vers le pool et sont marqués comme étant non valides.The connection pooler periodically scans connection pools looking for objects that have been released to the pool and are marked as invalid. Ces connexions sont alors définitivement supprimées.These connections are then permanently removed.

Si une connexion existante à un serveur a disparu, il est possible de la retirer du pool si le dispositif de regroupement n'a pas détecté d'interruption de la connexion et ne l'a pas marquée comme non valide.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. Dans ce cas, une exception est générée.When this occurs, an exception is generated. Vous devez cependant toujours fermer la connexion afin de la libérer à nouveau vers le pool.However, you must still close the connection in order to release it back into the pool.

N'appelez pas une commande Close ou Dispose sur une Connection, un DataReader ou tout autre objet managé dans la méthode Finalize de votre classe.Do not call Close or Dispose on a Connection, a DataReader, or any other managed object in the Finalize method of your class. Dans un finaliseur, libérez seulement les ressources non managées que votre classe possède directement.In a finalizer, only release unmanaged resources that your class owns directly. Si votre classe ne possède pas de ressource non managée, n'incluez pas une méthode Finalize dans la définition de classe.If your class does not own any unmanaged resources, do not include a Finalize method in your class definition. Pour plus d’informations, consultez garbage collection.For more information, see Garbage Collection.

Prise en charge des transactionsTransaction Support

Les connexions sont retirées du pool et assignées en fonction du contexte de transaction.Connections are drawn from the pool and assigned based on transaction context. Le contexte du thread de requête et la connexion assignée doivent correspondre.The context of the requesting thread and the assigned connection must match. Par conséquent, chaque pool de connexions est en fait sous-divisé en connexions auxquelles aucun contexte de transaction n’est associé et en N sous-divisions qui contiennent chacune des connexions avec un contexte de transaction particulier.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.

Lorsqu'une connexion est fermée, elle est libérée à nouveau vers le pool et dans la sous-division appropriée en fonction de son contexte de transaction.When a connection is closed, it is released back into the pool and into the appropriate subdivision based on its transaction context. Par conséquent, vous pouvez fermer la connexion sans générer d'erreur, même si une transaction distribuée est toujours en attente.Therefore, you can close the connection without generating an error, even though a distributed transaction is still pending. Cela vous permet de valider ou d'abandonner ultérieurement la transaction distribuée.This allows you to commit or abort the distributed transaction at a later time.

Contrôle des pools de connexions avec les mots clés des chaînes de connexionControlling Connection Pooling with Connection String Keywords

La propriété ConnectionString de l'objet OracleConnection prend en charge les paires clé-valeur des chaînes de connexion qui peuvent être utilisées pour ajuster le comportement de la logique de regroupement des connexions.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.

Le tableau suivant décrit les valeurs ConnectionString que vous pouvez utiliser pour ajuster le comportement de regroupement des connexions.The following table describes the ConnectionString values you can use to adjust connection pooling behavior.

NomName DefaultDefault DescriptionDescription
Connection Lifetime 00 Lorsqu’une connexion est retournée au pool, l’heure de sa création est comparée à l’heure actuelle et la connexion est détruite si cet intervalle de temps (en secondes) excède la valeur spécifiée par Connection Lifetime.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. Cela est utile dans les configurations en clusters pour forcer l'équilibrage de la charge entre un serveur en cours d'exécution et un serveur qui vient d'être mis en ligne.This is useful in clustered configurations to force load balancing between a running server and a server just brought online.

La valeur zéro (0) aura pour conséquence un délai d'attente maximal pour les connexions regroupées.A value of zero (0) will cause pooled connections to have the maximum time-out.
Enlist 'true''true' Si la valeur est true, le dispositif de regroupement inscrit automatiquement la connexion dans le contexte de transaction en cours du thread de création si un contexte de transaction existe.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 Nombre maximal de connexions autorisées dans le pool.The maximum number of connections allowed in the pool.
Min Pool Size 00 Nombre minimal de connexions conservées dans le pool.The minimum number of connections maintained in the pool.
Pooling 'true''true' Si la valeur est true, la connexion est retirée du pool approprié ou, si nécessaire, créée et ajoutée au pool approprié.When true, the connection is drawn from the appropriate pool, or if necessary, created and added to the appropriate pool.

Voir aussiSee also