Tous les produits
Search
Centre de documentation

ApsaraDB RDS:Configure connection pooling

Dernière mise à jour :Aug 19, 2026

La fonctionnalité Database Proxy intègre un mécanisme de regroupement de connexions (connection pooling) qui s'intercale entre votre application et l'instance RDS. Lorsque votre application utilise des connexions éphémères ou approche la limite maximale de connexions de l'instance, le regroupement de connexions réduit la fréquence d'établissement de nouvelles connexions. Cela diminue la charge sur le thread principal et réduit le nombre total de connexions ouvertes.

Choisir un type de pool de connexions

ApsaraDB RDS for MySQL propose deux types de pools de connexions. Répondez aux questions suivantes pour déterminer celui qui correspond le mieux à votre charge de travail.

Vos connexions restent-elles ouvertes pendant toute la durée de la session ou sont-elles éphémères ?

  • Connexions persistantes (frameworks web avec pools intégrés tels que Druid, DBCP, c3p0 ou HikariCP) : désactivez le regroupement de connexions. Le proxy n'apporte aucune valeur ajoutée dans ce cas, car le pool au niveau de l'application est suffisant.

  • Connexions éphémères (scripts PHP, fonctions serverless, modèles de connexion par requête) : activez le regroupement de connexions et poursuivez la lecture ci-dessous.

**Atteignez-vous la limite de connexions de l'instance ou vos charges de travail utilisent-elles les limites au niveau des transactions ?**

Situation Type recommandé
Les connexions atteignent fréquemment le maximum de l'instance Regroupement de connexions au niveau des transactions (recommandé)
Les limites au niveau des transactions affectent votre charge de travail Regroupement de connexions au niveau de la session
Par défaut, le regroupement de connexions est désactivé. Après avoir modifié le type de pool de connexions, la modification ne s'applique qu'aux nouvelles connexions.

Limitations

Le tableau ci-dessous compare les opérations et fonctions prises en charge dans chaque mode de pool. Consultez ces informations avant de choisir un type.

Fonctionnalité Au niveau des transactions Au niveau de la session
Instruction PREPARE Non prise en charge — verrouille la connexion jusqu'à sa fermeture Pris en charge
Tables temporaires Non pris en charge — verrouille la connexion jusqu'à sa fermeture Pris en charge
Variables utilisateur Non pris en charge — verrouille la connexion jusqu'à sa fermeture Pris en charge
Paquets volumineux (≥16 Mo) Non pris en charge — verrouille la connexion jusqu'à sa fermeture Pris en charge
LOCK TABLE Non pris en charge — verrouille la connexion jusqu'à sa fermeture Pris en charge
Requêtes multi-instructions Non pris en charge — verrouille la connexion jusqu'à sa fermeture Pris en charge
Procédures stockées Non pris en charge — verrouille la connexion jusqu'à sa fermeture Pris en charge
FOUND_ROWS() Imprécis (voir la note ci-dessous) Pris en charge
ROW_COUNT() Imprécis Pris en charge
LAST_INSERT_ID() Imprécis (voir la note ci-dessous) Pris en charge
Pour la version V1.13.11 ou ultérieure du proxy de base de données :
SELECT FOUND_ROWS() après SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT * renvoie des résultats précis. Toutefois, ce modèle n'est plus recommandé par MySQL. Remplacez-le par SELECT COUNT(*) FROM tb1 . Consultez FOUND_ROWS() .
SELECT LAST_INSERT_ID() après une instruction INSERT renvoie des résultats précis.

Lorsqu'une connexion est verrouillée (déclenché par les opérations ci-dessus), elle ne peut pas être rendue au pool tant que la connexion n'est pas explicitement fermée. En pratique, la session se comporte comme un regroupement au niveau de la session pendant toute la durée de vie de cette connexion.

Note d'utilisation pour les variables au niveau de la session : Le regroupement de connexions au niveau des transactions fait correspondre les variables suivantes dans les requêtes : sql_mode, character_set_server, collation_server et time_zone. Si une requête inclut d'autres variables système au niveau de la session, vous devez exécuter explicitement l'instruction SET sur votre client pour configurer ces variables après l'établissement de la connexion pour la requête. Sinon, une connexion dont les variables système ont été reconfigurées peut être sélectionnée dans le pool de connexions et réutilisée.

Fonctionnement

Le proxy de base de données divise chaque connexion en deux parties : une connexion frontale entre votre application et le proxy, et une connexion dorsale entre le proxy et la base de données.

Regroupement de connexions au niveau des transactions

Plusieurs sessions partagent une seule connexion dorsale. Le proxy n'ouvre pas immédiatement une connexion dorsale lorsqu'un client se connecte. Il attend plutôt qu'une transaction soit prête à s'exécuter, puis sélectionne une connexion dorsale disponible dans le pool.

Une connexion dorsale est disponible lorsque ses valeurs user et dbname correspondent aux valeurs des variables système spécifiées.

  • Si une connexion correspondante existe, le proxy l'utilise. Lorsque la transaction se termine, le proxy rend la connexion au pool ; la session peut continuer sans se terminer.

  • Si aucune connexion correspondante n'existe, le proxy en ouvre une nouvelle.

Étant donné que les sessions inactives ne conservent pas les connexions dorsales, plusieurs sessions en cours peuvent être multiplexées sur un nombre inférieur de connexions dorsales (N sessions : 1 connexion dorsale). Cela réduit à la fois la fréquence des connexions et le nombre total de connexions.

image

Le proxy de base de données n'impose pas de limite stricte au nombre de connexions. Le maximum est déterminé par les spécifications de votre instance RDS.

Regroupement de connexions au niveau de la session

Une session occupe une connexion dorsale (N sessions : N connexions dorsales). Le proxy recherche une connexion dorsale disponible dans le pool lorsqu'une session démarre.

Une connexion dorsale est disponible lorsque ses valeurs user, clientip et dbname correspondent toutes.

  • Si une connexion correspondante existe, le proxy la réutilise, évitant ainsi la surcharge liée à l'établissement de la connexion (handshake).

  • Si aucune connexion correspondante n'existe, le proxy en ouvre une nouvelle.

Lorsque la session se termine, le proxy rend la connexion dorsale au pool pour qu'elle soit réutilisée par la session suivante. Cela réduit la surcharge liée à l'établissement de la connexion sans réduire le nombre total de connexions ouvertes.

image

image

image

Tant qu'une session est active, sa connexion dorsale ne peut pas être utilisée par d'autres sessions, même si la session est inactive entre les instructions.

Notes d'utilisation

  • Autorisations spécifiques à l'adresse IP : Le regroupement de connexions ne prend pas en charge les autorisations par adresse IP pour un compte. Si un compte dispose d'autorisations différentes selon l'adresse IP source (par exemple, accès à database_a depuis 192.xx.xx.1 mais pas depuis 192.xx.xx.2), des erreurs d'autorisation peuvent se produire lors de la réutilisation des connexions existantes.

  • Pools au niveau de l'application : Le regroupement de connexions du proxy n'interfère pas avec les pools au niveau de l'application (Druid, DBCP, c3p0, HikariCP). Si votre application gère déjà son propre pool, il n'est pas nécessaire d'activer le regroupement de connexions au niveau du proxy.

  • Requêtes lentes : Le regroupement de connexions ne résout pas l'accumulation de connexions causée par des requêtes SQL lentes. Optimisez les requêtes ou dépannez le problème au niveau de l'instance.

  • Version du proxy et type de point de terminaison : Les versions du proxy antérieures à la 2.9.1 ne prennent pas en charge le regroupement de connexions sur les points de terminaison en lecture seule. La version 2.9.1 et les versions ultérieures prennent en charge le regroupement de connexions sur les points de terminaison en lecture/écriture et en lecture seule.

  • Comportement de wait_timeout : Lorsque le regroupement de connexions au niveau des transactions est activé, le paramètre wait_timeout peut ne pas prendre effet sur votre client. Le proxy sélectionne une connexion dans le pool à chaque requête. Lorsque wait_timeout expire, seules les connexions dorsales sont fermées ; la connexion côté client reste ouverte.

  • Détection de la réutilisation des connexions : Exécutez SELECT CONNECTION_ID() pour obtenir l'ID du thread actuel. Si l'ID du thread change entre les requêtes dans la même session client, la connexion est réutilisée depuis le pool.

  • Comportement de SHOW PROCESSLIST : Lorsque le regroupement de connexions au niveau des transactions est activé, l'ID du thread frontal diffère de l'ID du thread dorsal. Par conséquent, une commande KILL peut renvoyer une erreur même après la fin réussie d'un processus. Exécutez à nouveau SHOW PROCESSLIST pour confirmer l'état du processus. Le proxy agrège également les résultats de toutes les instances principales, secondaires et en lecture seule avant de les renvoyer à votre application. L'adresse IP et le port affichés dans SHOW PROCESSLIST ou dans la fonctionnalité SQL Explorer and Audit peuvent différer de l'adresse client réelle. Pour plus d'informations, consultez Utiliser la fonctionnalité SQL Explorer and Audit.

Activer le regroupement de connexions

Prérequis

Avant de commencer, assurez-vous d'avoir :

Étapes

  1. Accédez à la page Instances. Dans la barre de navigation supérieure, sélectionnez la région où réside l'instance RDS, puis cliquez sur l'ID de l'instance.

  2. Dans le volet de navigation de gauche, cliquez sur Database Proxy.

  3. Dans la section Connection Information, activez le regroupement de connexions en utilisant l'une des méthodes suivantes :

    Méthode 1 — Activation rapide via l'icône d'état

    Placez le pointeur sur l'icône image.png à droite du point de terminaison du proxy. Dans la boîte de dialogue qui s'affiche, cliquez sur Enable Transaction-level Connection Pooling ou Enable Session-level Connection Pooling, puis cliquez sur OK.

    Méthode 2 — Modifier la configuration du point de terminaison

    Recherchez le point de terminaison du proxy, cliquez sur Method 2 — Modify endpoint configuration dans la colonne Modify Configuration, puis sélectionnez le type de pool de connexions à côté de Actions.

    Si le regroupement de connexions est déjà activé, vous pouvez modifier le type de pool en utilisant cette méthode.

    image.png

    image.png

FAQ

Combien de connexions le pool peut-il contenir ?

Il n'y a pas de maximum fixe pour le pool lui-même. Si votre application approche la limite de connexions de l'instance, activez le regroupement de connexions au niveau des transactions pour multiplexer les sessions sur moins de connexions dorsales.

Combien de temps les connexions inactives restent-elles dans le pool ?

Les connexions dans le pool restent actives pendant 10 secondes avant d'être fermées.

Le regroupement de connexions affecte-t-il les performances ?

Pour les charges de travail avec des connexions éphémères, l'activation du regroupement de connexions améliore les performances de l'instance d'environ 10 %.

Quelle est la différence entre le regroupement au niveau des transactions et au niveau de la session ?

Au niveau des transactions Au niveau de la session
Les sessions partagent les connexions dorsales Oui Non
Connexion dorsale en cours d'utilisation Pendant le traitement d'une transaction Pendant qu'une session est active
Connexion dorsale rendue au pool Lorsque la transaction est terminée (la session peut continuer) Lorsque la session se termine
Mappage session-vers-connexion dorsale N:1 N:N
Réduit le nombre total de connexions Oui Non

Mon application s'est déconnectée du proxy. Le regroupement de connexions en est-il la cause ?

Pas nécessairement. La cause dépend des conditions spécifiques au moment de la déconnexion et peut ne pas être liée au regroupement de connexions.

Référence API

Opération Description
DescribeDBProxy Interroge les détails du proxy dédié d'une instance ApsaraDB RDS
DescribeDBProxyEndpoint Interroge les informations sur un point de terminaison de proxy
ModifyDBProxyEndpoint Modifie les paramètres de connexion pour un point de terminaison de proxy