Pool de connexions pour le fournisseur de données .NET Framework pour Oracle
Le regroupement de connexions peut considérablement améliorer la performance et l'évolutivité de votre application. Le fournisseur de données .NET Framework pour Oracle assure automatiquement le regroupement de connexions pour votre application cliente ADO.NET. Vous pouvez aussi fournir plusieurs modificateurs de chaîne de connexion afin de contrôler le comportement du pool de connexions (consultez la section Contrôle des pools de connexions avec les mots clés des chaînes de connexion, plus loin dans cette rubrique).
Remarque Le fournisseur de données .NET Framework pour Oracle n'est pas inclus dans le .NET Framework version 1.0. Si vous avez besoin du fournisseur de données .NET Framework pour Oracle et que vous utilisez le .NET Framework version 1.0, vous pouvez le télécharger à l'adresse https://msdn.microsoft.com/downloads.
Création et assignation d'un pool
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. Chaque pool de connexions est associé à une chaîne de connexion distincte. Lorsqu'une nouvelle connexion est ouverte, si la chaîne de connexion ne correspond pas exactement à un pool existant, un nouveau pool est créé.
Une fois créés, les pools de connexion ne sont détruits qu'à la fin du processus actif. La maintenance des pools inactifs ou vides implique une charge mémoire minimale du système.
Ajout de connexions
Un pool de connexions est créé pour chaque chaîne de connexion unique. 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. Les connexions sont ajoutées au pool jusqu'à ce que sa taille maximale soit atteinte.
Lorsqu'un objet OracleConnection est demandé, il est obtenu du pool si une connexion utilisable est disponible. 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.
Si la taille maximale du pool est atteinte et qu'aucune connexion utilisable n'est disponible, la demande est mise en attente. Le dispositif de regroupement répond à ces demandes en réallouant les connexions à mesure qu'elles se libèrent. Les connexions sont libérées et retournées au pool lorsque vous appelez Close ou Dispose sur l'objet Connection.
**ATTENTION **Il est recommandé de toujours fermer l'objet Connection lorsque vous avez fini de l'utiliser, afin que la connexion soit retournée au pool. Pour cela, utilisez les méthodes Close ou Dispose de l'objet Connection. Les connexions qui ne sont pas explicitement fermées risquent de ne pas être ajoutées ni retournées au pool. Par exemple, une connexion devenue hors de portée mais qui n'a pas été explicitement fermée sera retournée au pool seulement si la taille maximale de celui-ci a été atteinte et que la connexion est toujours valide.
Remarque N'appelez pas Close ou Dispose sur un objet Connection, DataReader ou tout autre objet managé dans la méthode Finalize de votre classe. Dans un finaliseur, libérez seulement les ressources non managées que votre classe possède directement. Si votre classe ne possède pas de ressources non managées, n'incluez pas la méthode Finalize dans votre définition de classe. Pour plus d'informations, consultez Programmation d'un garbage collection.
Suppression des connexions
Le dispositif de regroupement supprime une connexion du pool si sa durée de vie a expiré ou s'il détecte que la connexion avec le serveur a été interrompue. Notez que cela ne peut être détecté qu'après une tentative de communication avec le serveur. Si une connexion n'est plus reliée au serveur, elle est marquée comme étant non valide. 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. Ces connexions sont alors définitivement supprimées.
Si une connexion à un serveur a disparu, il est possible de la retirer du pool, même si le dispositif de regroupement n'a pas détecté d'interruption de la connexion et ne l'a pas marquée comme étant non valide. Dans ce cas, une exception est générée. Vous devez cependant toujours fermer la connexion afin de la libérer à nouveau vers le pool.
Prise en charge des transactions
Les connexions sont retirées du pool et assignées en fonction du contexte de transaction. Le contexte du thread de demande et la connexion assignée doivent correspondre. 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.
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. 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. Ceci vous permet de valider ou d'abandonner ultérieurement la transaction distribuée.
Contrôle des pools de connexions avec les mots clés des chaînes de connexion
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.
Le tableau suivant décrit les valeurs ConnectionString que vous pouvez utiliser pour ajuster le comportement de regroupement des connexions.
Name | Default | Description |
---|---|---|
Connection Lifetime | 0 | 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. Ceci 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.
La valeur zéro (0) aura pour conséquence un délai d'attente maximal pour les connexions regroupées. |
Enlist | '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. |
Max Pool Size | 100 | Nombre maximal de connexions autorisées dans le pool. |
Min Pool Size | 0 | Nombre minimal de connexions conservées dans le pool. |
Pooling | '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é. |
Voir aussi
Connexion à une source de données à l'aide de ADO.NET | Utilisation des fournisseurs de données .NET Framework pour l'accès aux données | OracleConnection, classe