Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Éviter d'épingler un proxy RDS
Le multiplexage est plus efficace lorsque les demandes de base de données ne dépendent pas des informations d'état issues de demandes précédentes. Dans ce cas, RDS Proxy peut réutiliser une connexion à la fin de chaque transaction. Ces informations d'état incluent la plupart des variables et des paramètres de configuration que vous pouvez modifier à l'aide des instructions SET
ou SELECT
. SQLles transactions sur une connexion client peuvent être multiplexées entre les connexions de base de données sous-jacentes par défaut.
Vos connexions au proxy peuvent entrer dans un état appelé épinglage. Lorsqu'une connexion est épinglée, chaque transaction ultérieure utilise la même connexion de base de données sous-jacente jusqu'à la fin de la session. De même, les autres connexions client ne peuvent pas réutiliser cette connexion à la base de données tant que la session n'est pas terminée. La session se termine lorsque la connexion client est supprimée.
RDSLe proxy associe automatiquement une connexion client à une connexion de base de données spécifique lorsqu'il détecte un changement d'état de session qui n'est pas approprié pour les autres sessions. L'épinglage réduit l'efficacité de la réutilisation des connexions. Si la totalité, ou presque, de vos connexions font l'objet d'un épinglage, pensez à modifier le code de votre application ou votre charge de travail afin de réduire les conditions à l'origine de l'épinglage.
Par exemple, votre application modifie une variable de session ou un paramètre de configuration. Dans ce cas, les instructions ultérieures peuvent reposer sur la nouvelle variable ou le nouveau paramètre pour entrer en vigueur. Ainsi, lorsque le RDS proxy traite les demandes de modification des variables de session ou des paramètres de configuration, il associe cette session à la connexion à la base de données. De cette manière, l'état de session reste en vigueur pour toutes les transactions ultérieures de la même session.
Pour les moteurs de bases de données, cette règle ne s'applique pas à tous les paramètres que vous pouvez définir. RDSLe proxy suit certaines instructions et variables. Ainsi, le RDS proxy n'épingle pas la session lorsque vous les modifiez. Dans ce cas, le RDS proxy ne réutilise la connexion que pour les autres sessions qui ont les mêmes valeurs pour ces paramètres. Pour les listes des instructions suivies et des variables pour Aurora MySQL, voirCe que RDS Proxy suit pour les SQL bases de données Aurora My.
Ce que RDS Proxy suit pour les SQL bases de données Aurora My
Voici les Mes SQL déclarations suivies RDS par Proxy :
DROP DATABASE
DROP SCHEMA
USE
Voici les SQL variables Mes variables suivies par le RDS proxy :
AUTOCOMMIT
AUTO_INCREMENT_INCREMENT
CHARACTER SET (or CHAR SET)
CHARACTER_SET_CLIENT
CHARACTER_SET_DATABASE
CHARACTER_SET_FILESYSTEM
CHARACTER_SET_CONNECTION
CHARACTER_SET_RESULTS
CHARACTER_SET_SERVER
COLLATION_CONNECTION
COLLATION_DATABASE
COLLATION_SERVER
INTERACTIVE_TIMEOUT
NAMES
NET_WRITE_TIMEOUT
QUERY_CACHE_TYPE
SESSION_TRACK_SCHEMA
SQL_MODE
TIME_ZONE
TRANSACTION_ISOLATION (or TX_ISOLATION)
TRANSACTION_READ_ONLY (or TX_READ_ONLY)
WAIT_TIMEOUT
Minimiser l'épinglage
L'optimisation des performances du RDS proxy implique d'essayer de maximiser la réutilisation des connexions au niveau des transactions (multiplexage) en minimisant le pinning.
Vous pouvez minimiser l'épinglage en procédant comme suit :
-
Évitez les requêtes de base de données inutiles qui pourraient provoquer l'épinglage.
-
Définissez les variables et les paramètres de configuration de manière cohérente sur toutes les connexions. De cette façon, les sessions ultérieures sont plus susceptibles de réutiliser les connexions qui ont ces paramètres particuliers.
Cependant, pour Postgre, la SQL définition d'une variable entraîne un épinglage de session.
-
Pour une base de données de la famille My SQL engine, appliquez un filtre d'épinglage de session au proxy. Vous pouvez configurer certains types d'opérations pour qu'elles n'épinglent pas la session si vous savez que cela n'affecte pas le bon fonctionnement de votre application.
-
Découvrez la fréquence de l'épinglage en surveillant la CloudWatch métrique
DatabaseConnectionsCurrentlySessionPinned
Amazon. Pour plus d'informations à ce sujet et sur d'autres CloudWatch mesures, consultezSurveillance des métriques du proxy RDS avec Amazon CloudWatch. -
Si vous utilisez des instructions
SET
pour exécuter une initialisation identique pour chaque connexion client, vous pouvez conserver le multiplexage au niveau de la transaction. Dans ce cas, vous déplacez les instructions qui définissent l'état initial de la session vers la requête d'initialisation utilisée par un proxy. Cette propriété est une chaîne contenant une ou plusieurs SQL instructions, séparées par des points-virgules.Par exemple, vous pouvez définir une requête d'initialisation pour un proxy qui établit certains paramètres de configuration. RDSProxy applique ensuite ces paramètres chaque fois qu'il établit une nouvelle connexion pour ce proxy. Vous pouvez supprimer les instructions
SET
correspondantes de votre code d'application, afin qu'elles n'interfèrent pas avec le multiplexage au niveau de la transaction.Pour les métriques relatives à la fréquence d'épinglage d'un proxy, veuillez consulter Surveillance des métriques du proxy RDS avec Amazon CloudWatch.
Conditions qui entraînent l'épinglage pour toutes les familles de moteurs
Le proxy épingle la session à la connexion en cours dans les situations suivantes où le multiplexage peut entraîner un comportement inattendu :
Le proxy épingle la session si la taille de texte de l'instruction est supérieure à 16 Ko.
Conditions à l'origine de l'épinglage pour Aurora My SQL
Pour MySQL, les interactions suivantes sont également à l'origine du pinning :
-
Le proxy épingle la session en cas d'instructions de verrouillage de table
LOCK TABLE
,LOCK TABLES
ouFLUSH TABLES WITH READ LOCK
explicites. -
La création de verrous nommés à l'aide de
GET_LOCK
entraîne le proxy à épingler la session. -
Le proxy épingle la session lors de la définition d'une variable utilisateur ou d'une variable système (à quelques exceptions près). Si cette situation réduit trop la réutilisation de votre connexion, optez pour
SET
des opérations qui ne provoquent pas d'épinglage. Pour plus d'informations sur la manière de procéder en définissant la propriété des filtres d'épinglage de session, consultez Création d'un RDS proxy et Modification du RDS proxy. -
Le proxy épingle la session lors de la création d'une table temporaire. De cette façon, le contenu de la table temporaire est conservé tout au long de la session, sans tenir compte des limites de transaction.
-
L'appel des fonctions
ROW_COUNT
,FOUND_ROWS
etLAST_INSERT_ID
entraîne parfois un épinglage.Les circonstances exactes dans lesquelles ces fonctions provoquent l'épinglage peuvent différer selon les SQL versions d'Aurora My compatibles avec My SQL 5.7.
-
Le proxy épingle la session en cas d'instructions préparées. Cette règle s'applique que l'instruction préparée utilise SQL du texte ou le protocole binaire.
-
RDSLe proxy n'épingle pas les connexions lorsque vous l'utilisez SETLOCAL.
-
L'appel de procédures et de fonctions stockées ne provoque pas d'épinglage. RDSLe proxy ne détecte aucun changement d'état de session résultant de tels appels. Assurez-vous que votre application ne modifie pas l'état de session dans les routines stockées si vous comptez sur cet état de session pour qu'il persiste dans toutes les transactions. Par exemple, RDS Proxy n'est actuellement pas compatible avec une procédure stockée qui crée une table temporaire qui persiste dans toutes les transactions.
Si vous avez des connaissances avancées sur le comportement de votre application, vous pouvez ignorer le comportement d'épinglage de certaines instructions d'application. Pour ce faire, sélectionnez l'option Filtres d'épinglage de session lors de la création du proxy. Actuellement, vous pouvez désactiver l'épinglage de session pour définir des variables de session et des paramètres de configuration.
Conditions à l'origine de l'épinglage pour Aurora Postgre SQL
Pour PostgreSQL, les interactions suivantes sont également à l'origine du pinning :
-
À l'aide de
SET
commandes. -
Utilisation
PREPARE
desEXECUTE
commandesDISCARD
DEALLOCATE
,, ou pour gérer les instructions préparées. -
Création de séquences, de tables ou de vues temporaires.
-
Déclarer des curseurs.
-
Suppression de l'état de session.
-
Écoute sur un canal de notification.
-
Chargement d'un module de bibliothèque tel que
auto_explain
. -
Manipulation de séquences à l'aide de fonctions telles que
nextval
et.setval
-
Interaction avec les verrous à l'aide de fonctions telles que
pg_advisory_lock
etpg_try_advisory_lock
.Note
RDSLe proxy n'épingle pas les verrous consultatifs au niveau des transactions
pg_advisory_xact_lock
, en particulierpg_advisory_xact_lock_shared
pg_try_advisory_xact_lock
,, etpg_try_advisory_xact_lock_shared
. -
Définition d'un paramètre ou réinitialisation d'un paramètre à sa valeur par défaut. Plus précisément, utiliser
SET
desset_config
commandes et pour attribuer des valeurs par défaut aux variables de session. -
L'appel de procédures et de fonctions stockées ne provoque pas d'épinglage. RDSLe proxy ne détecte aucun changement d'état de session résultant de tels appels. Assurez-vous que votre application ne modifie pas l'état de session dans les routines stockées si vous comptez sur cet état de session pour qu'il persiste dans toutes les transactions. Par exemple, RDS Proxy n'est actuellement pas compatible avec une procédure stockée qui crée une table temporaire qui persiste dans toutes les transactions.