Pour décharger le trafic de lecture de votre instance principale sans sacrifier la cohérence de lecture de vos écritures ni modifier les points de terminaison de connexion de l'application, vous pouvez activer, configurer et surveiller le transfert de requêtes transparent dans vos instances AlloyDB pour PostgreSQL. Le transfert de requêtes transparent intercepte les requêtes en lecture seule sur le nœud principal et les achemine de manière sélective vers des instances de pool de lecture sous-utilisées, en renvoyant des résultats cohérents avec l'exécution du nœud principal.

Le transfert de requêtes transparent est particulièrement adapté aux scénarios suivants :
- Charges de travail hybrides (HTAP) : vous exécutez des requêtes de reporting ou d'analyse, avec une cohérence de lecture de vos écritures, sur la même base de données qui gère les transactions, et vous souhaitez éviter que des lectures coûteuses n'affectent la latence d'écriture.
- Applications monolithiques : vous souhaitez utiliser la capacité du pool de lecture sans refactoriser votre application pour utiliser des points de terminaison de lecture et d'écriture distincts, tout en exigeant une cohérence stricte de lecture de vos écritures.
- Gestion dynamique de la charge : vous rencontrez des pics imprévisibles de trafic de lecture et vous souhaitez que la base de données décharge automatiquement le travail vers les nœuds du pool de lecture lorsque le nœud principal est soumis à une charge importante avec une cohérence de lecture de vos écritures.
Avant de commencer
Assurez-vous que votre cluster AlloyDB est compatible avec PostgreSQL 17 ou 18.
Vous devez avoir configuré au moins une instance de pool de lecture active dans votre cluster AlloyDB. Pour en savoir plus sur la création ou la vérification d'instances de pool de lecture, consultez Créer une instance de pool de lecture dans un cluster et Afficher les détails d'une instance.
Rôles requis
- Assurez-vous de vous connecter à l'aide d'un utilisateur de base de données intégré, tel que
postgres. L'authentification basée sur IAM n'est pas compatible.
Activer le transfert de requêtes transparent
Le transfert de requêtes transparent est désactivé par défaut. Vous pouvez l'activer de manière dynamique au niveau de la session ou de la base de données sans redémarrer la base de données.
Activer au niveau de la session
Pour activer le transfert de requêtes transparent pour votre session actuelle, exécutez la commande SQL suivante :
SET alloydb.enable_query_forwarding = TRUE;
Activer au niveau de la base de données
Pour activer le transfert de requêtes transparent pour une base de données spécifique, exécutez la commande SQL suivante :
ALTER DATABASE DATABASE_NAME SET alloydb.enable_query_forwarding = ON;
Remplacez DATABASE_NAME par le nom de votre base de données.
Conditions d'éligibilité des requêtes
- Le transfert de requêtes transparent ne s'applique qu'aux instructions
SELECTen lecture seule. - La requête ne doit pas utiliser de verrous au niveau des lignes, tels que ceux utilisés dans
SELECT ... FOR UPDATE. - La compatibilité du transfert de requêtes transparent avec les instructions
SELECTdans les transactions multi-instructions est limitée. - Les requêtes ne peuvent pas référencer des tables temporaires, non journalisées ou de catalogue.
- La requête doit respecter les contraintes de fonction suivantes :
- La requête ne doit pas contenir de fonctions volatiles ni de fonctions définies par l'utilisateur (UDF).
- La requête ne doit pas contenir de fonctions de valeur SQL telles que
CURRENT_DATE,LOCALTIME,USERouCURRENT_SCHEMA. - La requête ne doit pas contenir d'expressions
NEXTVAL(). - La requête ne peut contenir aucune procédure SQL ni fonction SQL.
- Toutes les colonnes de résultats doivent utiliser des types de données qui implémentent des fonctions d'envoi et de réception binaires.
- Une requête n'est éligible au transfert que si son coût de traitement est minime par rapport au coût total de la requête. Cela signifie que les requêtes utilisant des analyses d'index sont généralement exclues, car leur surcharge dépasse généralement le coût de la requête elle-même.
- Le transfert vers un nœud de secours à chaud AlloyDB n'est pas possible. Un nœud de secours AlloyDB est un nœud secondaire dédié aux instances principales à haute disponibilité.
- La requête doit utiliser le protocole de requête simple. Le protocole de requête étendu n'est pas pris en charge.
Vérifier l'éligibilité des requêtes avec EXPLAIN
Dans l'exemple suivant, large_table est une table d'une base de données contenant de nombreuses lignes. Pour vérifier si une requête spécifique peut être transférée dans votre configuration actuelle, exécutez la commande EXPLAIN :
EXPLAIN SELECT count(*) FROM large_table t1, large_table t2;
Si la requête est éligible, le résultat inclut une instruction d'état de transfert de requête après le plan d'exécution Postgres standard. Si cette instruction est manquante, la requête n'est pas éligible au transfert de requêtes et s'exécute localement sur l'instance principale.
Aggregate (cost=25000.00..25000.01 rows=1 width=8)
-> Nested Loop (cost=0.00..20000.00 rows=1000000 width=0)
... [Standard Postgres Plan Steps] ...
Query Forwarding: Eligible. (overhead=1250.02)
Dans la réponse de sortie, Eligible indique que la requête répond aux critères SQL standards en lecture seule et que l'analyse coûts-avantages favorise son routage vers une instance de pool de lecture. Le paramètre overhead indique le coût calculé par le planificateur pour transférer la requête vers une instance du pool de lecture, y compris la surcharge liée à l'établissement de la connexion et à la restauration des instantanés sur l'instance répliquée.
Surveiller les métriques de transfert de requêtes
Pour vérifier que le transfert de requêtes transparent fonctionne sur votre charge de travail, vous pouvez suivre la métrique suivante dans Cloud Monitoring :
| Métrique | Description | Détails |
|---|---|---|
alloydb.googleapis.com/internal/database/postgresql/workload/distributed/tqf_query_count |
Nombre cumulé de requêtes traitées par le transfert de requêtes transparent. | Nom à afficher : nombre de requêtes TQF Genre de métrique : CUMULATIVE Type de valeur : INT64 Étiquettes : status : traitement des requêtes si le transfert de requêtes transparent est activé. Cette étiquette enregistre l'une des valeurs suivantes :
|