Comment résoudre les problèmes d'épinglage de connexion dans Amazon RDS Proxy ?
Je souhaite résoudre les problèmes d'épinglage de connexion lorsque j'utilise le proxy Amazon Relational Database Services (Amazon RDS) pour accéder à la base de données cible.
Résolution
Examiner les métriques CloudWatch
Procédez comme suit :
- Ouvrez la console Amazon CloudWatch.
- Dans le volet de navigation, sélectionnez Métriques, puis Toutes les métriques.
- Dans l'onglet Parcourir, choisissez RDS, puis Métriques par proxy.
- Recherchez la métrique DatabaseConnectionsCurrentlySessionPinned.
La métrique DatabaseConnectionsCurrentlySessionPinned indique le nombre de connexions à la base de données que le proxy RDS épingle toutes les 60 secondes. Lorsque les opérations effectuées dans la demande du client modifient l'état de la session, le proxy RDS épingle les connexions.
Remarque : la métrique DatabaseConnectionsCurrentlySessionPinned commence à enregistrer lorsque le proxy RDS détecte la première connexion épinglée et s'arrête lorsque la connexion épinglée possède des valeurs NULL.
Consulter les événements de journaux du proxy RDS
Pour obtenir des informations détaillées sur les instructions SQL et les opérations internes du proxy RDS, modifiez le proxy pour activer la journalisation améliorée.
Remarque : la journalisation améliorée s'éteint automatiquement au bout de 24 heures.
Pour résoudre les problèmes d'épinglage de connexion, consultez les événements de journaux du proxy RDS.
Procédez comme suit :
- Ouvrez la console CloudWatch.
- Dans le volet de navigation, choisissez Journaux, puis Groupes de journaux.
- Sélectionnez le groupe de journaux pour votre proxy, par exemple /aws/rds/proxy/name of your proxy.
- Dans l'onglet Flux de journaux, sélectionnez le flux de journaux pour afficher les événements de journaux.
Exécuter des requêtes CloudWatch Log Insights pour détecter les anomalies
Pour accéder à l'éditeur de requêtes dans CloudWatch Logs Insights, procédez comme suit :
- Ouvrez la console CloudWatch.
- Dans le volet de navigation, sélectionnez Journaux, puis Log Insights.
Utilisez l'éditeur de requêtes pour exécuter les requêtes suivantes. Dans chaque requête, remplacez proxy-name par le nom du proxy.
Pour déterminer pourquoi une connexion individuelle est bloquée, exécutez la requête suivante :
fields @message | sort @timestamp asc | filter @logStream like '{proxy-name}' | filter @message like /The client session was pinned to the database connection/
Pour obtenir le nombre le plus élevé de connexions épinglées, exécutez la requête suivante :
fields @message | sort @timestamp asc | filter @logStream like '{proxy-name}' | filter @message like /The client session was pinned to the database connection/ | parse 'Reason: \\\*' as reason | stats count() as reasonCount by reason | sort by reasonCount desc | limit 20
Résoudre les modifications apportées aux paramètres de session
Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.
Lorsque la connexion client modifie les paramètres des variables au niveau de la session, le proxy RDS épingle la connexion, car il ne peut pas la réutiliser.
Puis, le message d’erreur suivant s’affiche :
« The client session was pinned to the database connection [dbConnection=xxxx] for the remainder of the session. The proxy can't reuse this connection until the session ends. Reason: SQL changed session settings that the proxy doesn't track. Consider moving session configuration to the proxy's initialization query. »
Toutes les connexions à la base de données doivent présenter des paramètres identiques. Pour résoudre ce problème, ajoutez le paramètre de requête d'initialisation lorsque vous créez un proxy. Spécifiez les instructions SQL que le proxy doit exécuter lorsque celui-ci ouvre chaque nouvelle connexion à la base de données. Pour modifier un proxy existant, vous pouvez utiliser la console Amazon RDS ou exécuter la commande modify-db-proxy-target-group de l’AWS CLI.
Important : n'ajoutez pas de données sensibles, telles que des mots de passe ou des clés de chiffrement à longue durée de vie, à la requête d'initialisation. Les méthodes d'authentification ou cryptographiques ne le protègent pas, car toute personne ayant accès à la configuration de votre groupe cible de proxy peut consulter la requête d'initialisation.
Généralement, vous utilisez le paramètre de requête d'initialisation avec des instructions SET afin que chaque connexion possède des paramètres identiques. Pour inclure plusieurs variables dans une seule instruction SET, utilisez des séparateurs « virgule ».
Par exemple, vous pouvez exécuter la commande suivante pour définir une variable de fuseau horaire dans la requête d'initialisation :
aws rds modify-db-proxy-target-group --target-group-name default --db-proxy-name proxy --connection-pool-config '{ > "InitQuery": "SET time_zone = \"+00:00\";" > }'
Remarque : remplacez proxy par le nom de votre proxy.
Résoudre les erreurs d'analyse des messages et des instructions préparées au niveau du protocole
Lorsque des bibliothèques spécifiques, telles que asyncpg/mysql.connector, utilisent en interne des instructions préparées au niveau du protocole, vous recevez l'un des messages d'erreur suivants :
- « The client session was pinned to the database connection [dbConnection=xxxx] for the remainder of the session. The proxy can't reuse this connection until the session ends. Reason: A parse message was detected. »
- « The client session was pinned to the database connection [dbConnection=xxxx] for the remainder of the session. The proxy can't reuse this connection until the session ends. Reason: A protocol-level prepared statement was detected. »
Si le client utilise les instructions préparées, le proxy RDS épingle la connexion.
Pour résoudre ce problème, fermez toutes les connexions qui utilisent des instructions préparées une fois que le proxy les a utilisées explicitement.
Résoudre des requêtes SQL volumineuses
Le message d'erreur suivant peut s'afficher :
« The client session was pinned to the database connection [dbConnection=xxxx] for the remainder of the session. The proxy can't reuse this connection until the session ends. Reason: The connection ran a SQL query which exceeded the 16384 byte limit. »
Pour tous les moteurs de base de données pris en charge par le proxy RDS, le proxy RDS épingle une session lorsqu'il rencontre des instructions SQL d'une taille supérieure à 16 Ko. Il est recommandé de réduire la taille des instructions SQL. Par exemple, vous pouvez supprimer des commentaires ou limiter l'utilisation d'alias.
Réduire les broches de connexion
Pour éviter les requêtes inutiles à la base de données qui peuvent amener le proxy à épingler une connexion, effectuez les actions suivantes :
- Supprimez les opérations de base de données qui initient une broche de connexion.
- Utilisez des opérations par lots pour combiner les demandes associées en une seule requête.
Pour normaliser les paramètres de connexion, effectuez les actions suivantes :
- Maintenez des paramètres de variables et de configuration cohérents entre les connexions afin de gérer la réutilisation au niveau des transactions.
- Pour Amazon RDS pour PostgreSQL, définissez les variables côté base de données. Lorsque vous définissez les variables côté client, le proxy RDS épingle la connexion à la base de données.
- Pour les bases de données Amazon RDS pour MySQL, utilisez des filtres d'épinglage de session pour spécifier les opérations de base de données qui peuvent éviter en toute sécurité les exigences d'épinglage de session.
Il est recommandé de déplacer les instructions SET courantes vers la requête d'initialisation du proxy pour une initialisation identique sur toutes les connexions et pour maintenir la réutilisation au niveau transactionnel.
Informations connexes
Concepts et terminologie du proxy RDS
Surveillance des métriques du proxy RDS avec Amazon CloudWatch
- Langue
- Français

Contenus pertinents
- demandé il y a 2 ans
- demandé il y a 10 mois
- demandé il y a 2 ans
- demandé il y a 3 ans