Résoudre les problèmes liés aux requêtes de pool de lecture

Cette page décrit les techniques permettant d'étudier et de déboguer les requêtes qu'AlloyDB pour PostgreSQL envoie à une instance de pool de lecture :

  • Afficher une liste détaillée des nœuds constitutifs d'un pool de lecture, y compris leurs adresses IP.
  • Se connecter directement à un nœud à des fins de débogage.
  • Examiner les journaux AlloyDB pour déterminer quel nœud spécifique gère une requête envoyée à un pool de lecture.
  • Interroger les journaux pour connaître l'activité récente d'un nœud de pool de lecture donné.
  • Afficher les Google Cloud métriques associées à un nœud de pool de lecture.

Utilisées ensemble, ces techniques vous donnent un accès de diagnostic et de débogage à vos pools de lecture. Par exemple, si l'un des pools de lecture de votre cluster utilise une quantité inhabituelle de processeur lors du traitement d'une requête de longue durée, ces techniques vous permettent de déterminer quel nœud gère cette requête, puis de vous connecter directement à ce nœud pour examiner ou arrêter la requête.

Lister les détails des nœuds d'un pool de lecture

Dans le cadre d'une utilisation normale d'AlloyDB, vous n'avez pas besoin de connaître les identités ni les adresses des nœuds qui composent vos pools de lecture. Toutefois, si nécessaire, vous pouvez afficher la liste des nœuds d'une instance de pool de lecture. Chaque nœud listé inclut les informations suivantes, utiles pour les diagnostics et le débogage ultérieurs :

Pour afficher les chaînes d'ID internes et les adresses IP des nœuds d'un pool de lecture, suivez les instructions spécifiques à gcloud- de la section Afficher les détails de l'instance, mais ajoutez un argument de ligne de commande --view=FULL supplémentaire :

gcloud

gcloud alloydb instances describe READ_POOL_ID \
 --region=REGION_ID \
 --cluster=CLUSTER_ID \
 --project=PROJECT_ID \
 --view=FULL

Remplacez les éléments suivants :

  • READ_POOL_ID : ID du pool de lecture.
  • REGION_ID : identifiant de la région de l'instance.
  • CLUSTER_ID : ID du cluster de l'instance.
  • PROJECT_ID : ID du projet de l'instance.

La sortie inclut une section libellée nodes, qui ressemble à ceci :

nodes:
- id: READ_POOL_INSTANCE_ID-edd4f6ed-hcfh
  ip: 10.90.80.57
  state: HEALTHY
  zoneId: us-central1-b
- id: READ_POOL_INSTANCE_ID-edd4f6ed-ldbm
  ip: 10.90.80.56
  state: HEALTHY
  zoneId: us-central1-c

Les champs id et ip de chaque entrée sont particulièrement pertinents pour les autres techniques décrites sur cette page :

  • Le champ ip affiche l'adresse IP du nœud dans le VPC du cluster.

  • Le champ id contient la chaîne d'ID complète du nœud. Google Cloud Seuls les quatre derniers caractères de cette chaîne apparaissent dans les entrées de journalisation d'un nœud.

    Par exemple, pour trouver les entrées de journal impliquant le premier des deux nœuds de l'exemple de sortie précédent, interrogez les journaux à l'aide de la chaîne d'ID hcfh.

Se connecter directement à un nœud

Une fois que vous connaissez l'adresse IP d'un nœud, vous pouvez vous connecter directement à son serveur PostgreSQL. Par exemple, pour utiliser psql afin de vous connecter à une VM dans le VPC de votre cluster, suivez les instructions de la section Exécuter le client psql. Lorsque vous le faites, fournissez l'adresse IP du nœud plutôt que celle de son instance de pool de lecture :

psql -h NODE_IP_ADDRESS -U USERNAME

Rechercher l'activité des nœuds dans les journaux

AlloyDB inclut des ID de nœud dans les entrées de journalisation concernant les requêtes gérées par les pools de lecture. En règle générale, vous pouvez utiliser ces ID découverts de deux manières :

  • Déterminer l'adresse IP de ce nœud pour pouvoir vous y connecter.
  • Effectuer d'autres requêtes de journalisation pour en savoir plus sur l'activité récente du nœud.

Déterminer quel nœud gère une requête connue

Si vous savez qu'un certain pool de lecture traite une requête de longue durée, l'explorateur de journaux peut vous aider à déterminer l'ID du nœud spécifique qui gère cette requête.

Notez que cette technique ne fonctionne que sur les instances de pool de lecture pour lesquelles l'extension pgAudit est activée .

  1. Accédez à l'explorateur de journaux :

    Accéder à l'explorateur de journaux

  2. Dans le générateur de requêtes, ajoutez resource.labels.instance_id="READ_POOL_ID" au champ de l'éditeur de requête, en remplaçant READ_POOL_ID par le nom de votre instance de pool de lecture.

  3. Ajoutez l'instruction SQL que vous examinez, en tout ou en partie, au champ de l'éditeur de requête. Exemple : select id from MyTable. Cette entrée n'est pas sensible à la casse.

  4. Cliquez sur Exécuter la requête.

  5. Utilisez les commandes de l'explorateur de journaux pour ajuster et réexécuter la requête si nécessaire afin de filtrer les résultats pour n'afficher que les plus pertinents.

  6. Cliquez sur une entrée de journal dans la liste des résultats pour développer son affichage.

  7. Cliquez sur le champ labels dans l'affichage développé de l'entrée.

  8. Notez la valeur de NODE_ID sous labels.

Le résultat est l'identifiant à quatre caractères du nœud qui gère la requête.

Se connecter à un nœud mentionné dans une entrée de journal

Si vous souhaitez vous connecter directement au serveur PostgreSQL d'un nœud spécifique en fonction de son activité enregistrée, procédez comme suit :

  1. Notez la chaîne d'ID à quatre caractères du nœud enregistré. Vous trouverez cet ID dans le champ NODE_ID de l'entrée de journal.

  2. Listez les nœuds du pool de lecture.

  3. Dans cette liste, recherchez un nœud dont la chaîne d'ID se termine par les quatre caractères que vous avez notés à la première étape. Il est possible qu'aucun des nœuds listés ne corresponde.

  4. Si vous trouvez un nœud correspondant, utilisez son adresse IP correspondante pour vous connecter au serveur PostgreSQL de ce nœud.

    Sinon, si aucun des nœuds du pool de lecture listés à l'étape précédente n'a d'ID correspondant au nœud enregistré, cela signifie que le pool de lecture a mis hors service ce nœud dans l'intervalle de temps écoulé depuis l'entrée de journal d'origine. Ce comportement est normal pour les pools de lecture AlloyDB, comme décrit dans la section Remarque sur l'éphémérité des nœuds. Dans ce cas, vous ne pouvez pas établir de connexion directe à ce nœud.

Une fois que vous vous êtes connecté au serveur PostgreSQL d'un nœud, vous pouvez utiliser des techniques de surveillance PostgreSQL standards, telles que pg_stat_activity, pour examiner plus en détail les processus actuels du nœud et les ajuster si nécessaire.

Afficher plus d'entrées de journalisation concernant un nœud

Pour afficher l'activité enregistrée plus récente concernant un nœud avec un ID spécifique :

  1. Accédez à l'explorateur de journaux :

    Accéder à l'explorateur de journaux

  2. Ajoutez labels.NODE_ID=NODE_ID au the générateur de requêtes de l'explorateur de journaux, en remplaçant NODE_ID par la chaîne d'ID à quatre caractères du nœud.

  3. Cliquez sur Exécuter la requête pour afficher toute l'activité de ce nœud dans la fenêtre temporelle sélectionnée, ou ajustez la requête pour la filtrer davantage.

  4. Répétez l'étape précédente si nécessaire pour affiner votre recherche.

Surveiller les métriques des nœuds

Vous pouvez afficher les métriques associées à des nœuds individuels à partir du tableau de bord Insights sur le système AlloyDB. Pour en savoir plus sur les métriques de nœud disponibles, consultez la documentation de référence sur les métriques Insights sur le système.

Pour savoir quels ID de nœud sont associés à une instance de pool de lecture spécifique, consultez la section Lister les détails des nœuds d'un pool de lecture.

Pour obtenir une documentation de référence complète sur ces métriques et d'autres métriques AlloyDB, consultez alloydb dans "Google Cloud métriques".

Remarque sur l'éphémérité des nœuds

Bien que vous puissiez vous connecter en toute sécurité à un nœud à des fins d'investigation ou de débogage temporaires, les applications qui utilisent des pools de lecture doivent toujours se connecter à ces pools au niveau de l'instance, à l'aide de l'adresse IP que son cluster affiche dans sa liste d'instances.

AlloyDB traite les nœuds de ses pools de lecture comme des ressources éphémères et interchangeables. Le service modifie la liste des nœuds d'un pool de lecture aussi souvent que nécessaire afin de maintenir l'équilibrage de charge et la réactivité de cette instance de pool de lecture. Une application qui se connecte directement à un nœud de pool de lecture, plutôt qu'à une instance de pool de lecture, risque de se déconnecter brusquement de votre base de données chaque fois qu'AlloyDB met à jour la liste des nœuds de l'instance.

Laissez toujours vos applications se connecter à vos pools de lecture au niveau de l'instance, et laissez AlloyDB se charger de router efficacement vos requêtes vers les nœuds appropriés.

Étape suivante