[PYTHON] [Introduction à cx_Oracle] (13e) Connexion utilisant le pool de connexions (côté client)

Table de sérialisation

Série: Introduction à cx_Oracle Contents

Environnement de vérification

--Utilisation d'Oracle Cloud

Aperçu

La méthode de connexion standard à Oracle Database n'est en aucun cas rapide. Au contraire, il a tendance à être ridiculisé s'il est lent. Cependant, en utilisant la fonction de pool de connexions, il est possible d'obtenir des performances de connexion comparables à celles d'autres produits. Et maintenant, tant côté serveur que côté client, nous fournissons la fonction de pool de connexion en fonction d'Oracle Database lui-même. Avec Oracle Database, vous pouvez bénéficier de pools de connexions dans n'importe quel environnement de connexion, pas seulement Python. La fonction de pool de connexions côté serveur (DRCP (Database Resident Connection Pool), pool de connexions résidentes de base de données) est une fonction côté serveur et peut être utilisée dans n'importe quel environnement. Si vous êtes intéressé par les paramètres côté serveur, veuillez voir ci-dessous. Cependant, pour utiliser DRCP, il est nécessaire de spécifier des options lors de la connexion, de sorte que la partie qui nécessite un codage sera expliquée dans un autre temps. Cette fois, je vais expliquer le pool de connexions côté client.

(Référence) Définissez MINSIZE et MAXSIZE de DRCP (regroupement de connexions résidant à la base de données) d'Oracle Database sur 1 et essayez de vous connecter à partir de plusieurs sessions.

Pool de connexions côté client

cx_Oracle dispose d'une API pour utiliser la fonction de pool de connexions côté client d'Oracle Client. Lors de l'utilisation d'un pool de connexions côté client, créez d'abord un pool de connexions (pool de sessions). La connexion est terminée en utilisant ensuite la méthode Acquérir () de l'objet connect au lieu de la méthode connect () de l'objet cx_Oracle pour acquérir la session à partir du pool.

sample13a.py


import cx_Oracle
import time

USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"

#Mesure de la vitesse de connexion normale
t1 = time.time()
connection = cx_Oracle.connect(USERID, PASSWORD, DESTINATION)
t2 = time.time()
connection.close()
print(f"Heure de connexion lorsque le pool n'est pas utilisé: {t2 - t1}Secondes")

#Mesure de la vitesse de connexion du pool de connexion
pool = cx_Oracle.SessionPool(USERID, PASSWORD, DESTINATION, min=1, max=2, increment=1)
t1 = time.time()
connection = pool.acquire()
t2 = time.time()
pool.release(connection)
print(f"Temps de connexion lors de l'utilisation du pool: {t2 - t1}Secondes")

La 6ème ligne à partir du bas appelle cx_Oracle.SessionPool () pour créer un pool de sessions (pool de connexions). Les trois premiers arguments sont similaires à Connection.connect (). Le quatrième argument et les suivants spécifient la taille du pool de connexions à créer. min est le nombre minimum de connexions, max est le nombre maximum de connexions et incrément est la valeur d'incrémentation pour augmenter le nombre de sessions de min à max. Les valeurs sur les échantillons sont les valeurs par défaut pour les trois. Si votre application utilise le multithreading, spécifiez True pour l'argument de thread. Il est recommandé que les valeurs min et max soient identiques et que le nombre de sessions soit fixé pour éviter une surcharge de performances due à l'augmentation ou à la diminution du nombre de sessions. Ajustez le nombre spécifié en fonction de l'état de fonctionnement de l'application. Appelez la méthode release () pour mettre fin (libérer) la connexion sécurisée. Spécifiez la connexion ("connexion" dans cet exemple) qui requiert () est spécifiée dans l'argument.

Le résultat de l'exécution ne peut pas être publié en raison de circonstances adultes, mais si vous l'essayez, vous pouvez voir que la connexion est extrêmement rapide lors de l'utilisation du pool de connexions. Toutefois, cet exemple n'inclut pas l'heure de création du pool de sessions dans l'heure de connexion. Si vous l'incluez, quelle que soit la valeur de l'exemple ci-dessus, plus la valeur minimale est élevée, plus la création du pool prendra du temps, de sorte que la connexion normale sera plus rapide. En ce qui concerne l'utilisation correcte de la connexion normale et de l'utilisation du pool de connexions, il est possible de connecter la connexion normale à la base de données plusieurs fois, comme une application sans serveur, pour des applications telles que des applications de traitement par lots où le nombre de connexions est souvent un. Je pense qu'il vaut mieux utiliser le pool de connexions pour l'application attendue.

Pool de connexions hétérogène et pool de connexions homologues

Hétérogène et Homogène dans le titre indiquent si tous les utilisateurs connectés sont identiques (même type) ou non (hétérogènes) dans le même pool de connexions. La valeur par défaut est homogène. Dans le cas du même type de pool de connexions expliqué jusqu'à présent, l'utilisateur de la connexion est fixe, mais dans le cas du pool de connexions hétérogène expliqué ci-dessous, il est possible de mélanger les utilisateurs. Bien que flexible, la vitesse de connexion est plus lente que les pools de connexions similaires, car vous devez vous authentifier à chaque fois. cx_Oracle.SessionPool () a un argument True par défaut appelé homogène. Si vous définissez ce paramètre sur False et que vous vous connectez, vous pouvez spécifier différents utilisateurs pour chaque session. Spécifiez le nom d'utilisateur et le mot de passe dans Connection.acquire () au lieu de cx_Oracle.SessionPool ().

sample13b.py


import cx_Oracle
import time

USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"

#Pool de connexions homogène
pool = cx_Oracle.SessionPool(USERID, PASSWORD, DESTINATION, min=2, max=2)
t1 = time.time()
connection = pool.acquire()
t2 = time.time()
pool.release(connection)
print(f"Heure de connexion lors de l'utilisation du même type de pool de connexions: {t2 - t1}Secondes")

#Pool de connexions hétérogène
pool = cx_Oracle.SessionPool(dsn=DESTINATION, min=2, max=2, homogeneous=False)
t1 = time.time()
connection = pool.acquire(user=USERID, password=PASSWORD)
t2 = time.time()
pool.release(connection)
print(f"Temps de connexion lors de l'utilisation d'un pool de connexions hétérogène: {t2 - t1}Secondes")

Veuillez noter que les noms d'argument (utilisateur, mot de passe, dsn, respectivement) sont requis pour les arguments d'informations de nom d'utilisateur, de mot de passe et de destination de connexion.

Recommended Posts

[Introduction à cx_Oracle] (13e) Connexion utilisant le pool de connexions (côté client)
[Cx_Oracle Primer] (Partie 3) Bases de la navigation dans les tableaux
[Introduction à cx_Oracle] (Partie 7) Gestion des variables de liaison
Introduction à PyQt4 Partie 1
[Introduction à cx_Oracle] (Partie 11) Bases de l'exécution PL / SQL
[Introduction à cx_Oracle] Présentation de cx_Oracle
[Introduction à cx_Oracle] (8e) version de cx_Oracle 8.0
Introduction à discord.py (3) Utilisation de la voix
Introduction à Ansible Part «Inventaire»
Série: Introduction à cx_Oracle Contents
Introduction à Ansible Part ④'Variable '
[Introduction à cx_Oracle] (Partie 6) Mappage des types de données DB et Python
Introduction à l'API Socket apprise en langage C 2e édition client
Introduction à l'API Socket apprise en langage C 3e serveur / client TCP # 1
Introduction à Ansible Partie 2 'Grammaire de base'
Introduction à Python Hands On Partie 1
[Introduction à cx_Oracle] (Partie 2) Principes de base de la connexion et de la déconnexion à Oracle Database
Introduction à Ansible Partie 1 Hello World !! '
Introduction à l'API Socket apprise en langage C 4e édition serveur / client UDP # 1
Les débutants en Python publient des applications Web à l'aide de l'apprentissage automatique [Partie 2] Introduction à Python explosif !!
Introduction à la simulation d'événements discrets à l'aide de Python # 1
Web-WF Python Tornado Partie 3 (Introduction à Openpyexcel)
[PyTorch] Introduction à la classification de documents à l'aide de BERT
[Introduction à cx_Oracle] (12e) Gestion des exceptions DB
[Introduction à cx_Oracle] (17e) Gestion du type de date
Introduction à la simulation d'événements discrets à l'aide de Python # 2
Introduction à Tornado (3): Développement à l'aide de modèles [Pratique]
Kaggle: Introduction à l'ingénierie manuelle des fonctionnalités, partie 1
[Introduction à cx_Oracle] (Partie 9) Mappage des types de données DB et Python (version 8 ou ultérieure)
[Introduction à cx_Oracle] (16ème) Gestion des types LOB
[PyTorch] Introduction à la classification des documents japonais à l'aide de BERT
[Introduction à cx_Oracle] (5e) Gestion des données japonaises
Introduction à Tornado (2): Introduction au développement à l'aide de modèles - Génération de pages dynamiques -
Introduction à Scapy ② (transmission ICMP, HTTP (TCP) avec Scapy)