Risolvere i problemi relativi alle query sui pool di lettura

Questa pagina descrive le tecniche per l'analisi e il debug delle query che AlloyDB per PostgreSQL invia a un'istanza del pool di lettura:

  • Visualizzare un elenco dettagliato dei nodi che compongono un pool di lettura, inclusi i relativi indirizzi IP.
  • Connettersi direttamente a un nodo per il debug.
  • Esaminare i log di AlloyDB per determinare quale nodo specifico gestisce una determinata query inviata a un pool di lettura.
  • Eseguire query sui log per tutte le attività recenti da un determinato nodo del pool di lettura.
  • Visualizzare le metriche associate a un nodo del pool di lettura. Google Cloud

Utilizzate insieme, queste tecniche ti consentono di accedere ai pool di lettura per la diagnostica e il debug. Ad esempio, se uno dei pool di lettura del cluster utilizza una quantità insolita di CPU durante l'elaborazione di una query a lunga esecuzione, queste tecniche ti consentono di determinare quale nodo gestisce la query e quindi di connetterti direttamente al nodo per esaminare ulteriormente o terminare la query.

Elencare i dettagli dei nodi di un pool di lettura

In un utilizzo normale di AlloyDB, non è necessario conoscere le identità o gli indirizzi dei nodi che compongono i pool di lettura. Tuttavia, se necessario, puoi visualizzare un elenco dei nodi di un'istanza del pool di lettura. Ogni nodo elencato include le seguenti informazioni utili per la diagnostica e il debug successivi:

Per visualizzare le stringhe dell'ID interno e gli indirizzi IP dei nodi di un pool di lettura, segui le istruzioni specifiche di gcloud-riportate in Visualizzare i dettagli dell'istanza, ma aggiungi un argomento della riga di comando --view=FULL aggiuntivo:

gcloud

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

Sostituisci quanto segue:

  • READ_POOL_ID: l'ID del pool di lettura.
  • REGION_ID: l'ID regione dell'istanza.
  • CLUSTER_ID: l'ID del cluster dell'istanza.
  • PROJECT_ID: l'ID del progetto dell'istanza.

L'output include una sezione etichettata nodes, simile alla seguente:

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

I campi id e ip di ogni voce sono particolarmente pertinenti alle altre tecniche descritte in questa pagina:

  • Il campo ip mostra l'indirizzo IP del nodo all'interno del VPC del cluster.

  • Il campo id contiene la stringa dell'ID completo del nodo Google Cloud . Nelle voci di log di un nodo vengono visualizzati solo gli ultimi quattro caratteri di questa stringa.

    Ad esempio, per trovare le voci di log che riguardano il primo dei due nodi nell'output di esempio precedente, esegui una query sui log utilizzando la stringa dell'ID hcfh.

Connettersi direttamente a un nodo

Una volta che conosci l'indirizzo IP di un nodo, puoi connetterti direttamente al suo server PostgreSQL. Ad esempio, per utilizzare psql per connetterti a una VM nel VPC del cluster, segui le istruzioni riportate in Eseguire il client psql. Quando lo fai, fornisci l'indirizzo IP del nodo anziché quello dell'istanza del pool di lettura:

psql -h NODE_IP_ADDRESS -U USERNAME

Trovare l'attività dei nodi nei log

AlloyDB include gli ID nodo nelle voci di log relative alle query gestite dai pool di lettura. In generale, puoi utilizzare questi ID rilevati in due modi:

  • Determina l'IP del nodo in modo da poterti connettere.
  • Esegui ulteriori query sui log per scoprire di più sull'attività recente del nodo.

Determinare quale nodo gestisce una query nota

Se sai che un determinato pool di lettura sta elaborando una query a lunga esecuzione, Esplora log può aiutarti a determinare l'ID del nodo specifico che gestisce la query.

Tieni presente che questa tecnica funziona solo sulle istanze del pool di lettura in cui è stato abilitato l'estensione pgAudit.

  1. Visita Esplora log:

    Vai a Esplora log

  2. Nel generatore di query, aggiungi resource.labels.instance_id="READ_POOL_ID" al campo dell'editor di query, sostituendo READ_POOL_ID con il nome dell'istanza del pool di lettura.

  3. Aggiungi l'istruzione SQL che stai esaminando, per intero o in parte, al campo dell'editor di query. Ad esempio: select id from MyTable. L'input non fa distinzione tra maiuscole e minuscole.

  4. Fai clic su Esegui query.

  5. Utilizza i controlli di Esplora log per ottimizzare ed eseguire di nuovo la query, se necessario, per filtrare i risultati in modo da visualizzare solo quelli più pertinenti.

  6. Fai clic su una voce di log nell'elenco dei risultati per espanderne la visualizzazione.

  7. Fai clic sul campo labels nella visualizzazione espansa della voce.

  8. Prendi nota del valore di NODE_ID in labels.

Il risultato è l'identificatore di quattro caratteri del nodo che gestisce la query.

Connettersi a un nodo menzionato in una voce di log

Se vuoi connetterti direttamente al server PostgreSQL di un nodo specifico in base alla sua attività registrata, segui questi passaggi:

  1. Prendi nota della stringa dell'ID di quattro caratteri del nodo registrato. Puoi trovare questo ID nel campo NODE_ID della voce di log.

  2. Elenca i nodi del pool di lettura.

  3. Nell'elenco, trova un nodo con la stringa dell'ID che termina con i quattro caratteri annotati nel primo passaggio. È possibile che nessuno dei nodi elencati corrisponda.

  4. Se trovi un nodo corrispondente, utilizza l'indirizzo IP corrispondente per connetterti al server PostgreSQL del nodo.

    In caso contrario, se nessuno dei nodi del pool di lettura elencati nel passaggio precedente ha ID corrispondenti al nodo registrato, il pool di lettura ha ritirato il nodo nel tempo trascorso dalla voce di log originale. Si tratta di un comportamento normale per i pool di lettura di AlloyDB, come descritto in Una nota sull' effimeralità dei nodi. In questo caso, non puoi stabilire una connessione diretta a quel nodo.

Una volta connesso al server PostgreSQL di un nodo, puoi utilizzare le tecniche di monitoraggio standard di PostgreSQL, come pg_stat_activity, per esaminare ulteriormente i processi correnti del nodo e modificarli, se necessario.

Visualizzare altre voci di log relative a un nodo

Per visualizzare l'attività registrata più recente relativa a un nodo con un ID specifico:

  1. Visita Esplora log:

    Vai a Esplora log

  2. Aggiungi labels.NODE_ID=NODE_ID al generatore di query di Esplora log, sostituendo NODE_ID con la stringa ID di quattro caratteri del nodo.

  3. Fai clic su Esegui query per visualizzare tutta l'attività del nodo nella finestra temporale selezionata oppure ottimizza la query per filtrarla ulteriormente.

  4. Ripeti il passaggio precedente, se necessario, per perfezionare la ricerca.

Monitorare le metriche dei nodi

Puoi visualizzare le metriche associate ai singoli nodi dalla dashboard Insight sul sistema di AlloyDB. Per saperne di più sulle metriche dei nodi disponibili, consulta il riferimento alle metriche di Insight sul sistema.

Per scoprire quali ID nodo sono associati a una determinata istanza del pool di lettura, consulta Elencare i dettagli dei nodi di un pool di lettura.

Per la documentazione di riferimento completa di queste e altre metriche di AlloyDB, consulta alloydb in "Google Cloud metriche".

Una nota sull'effimeralità dei nodi

Sebbene tu possa connetterti in sicurezza a un nodo per scopi di analisi o debug temporanei, le applicazioni che utilizzano i pool di lettura devono sempre connettersi a questi pool a livello di istanza, utilizzando l'indirizzo IP visualizzato dal cluster nell'elenco delle istanze del cluster.

AlloyDB considera i nodi dei pool di lettura come risorse effimere e intercambiabili. Il servizio modifica l'elenco dei nodi di un pool di lettura con la frequenza necessaria per mantenere l'istanza del pool di lettura con bilanciamento del carico e reattiva. Un'applicazione che si connette direttamente a un nodo del pool di lettura, anziché a un'istanza del pool di lettura, rischia di disconnettersi bruscamente dal database ogni volta che AlloyDB aggiorna l'elenco dei nodi dell'istanza.

Consenti sempre alle applicazioni di connettersi ai pool di lettura a livello di istanza e lascia che AlloyDB si occupi di instradare in modo efficiente le query ai nodi appropriati.

Passaggi successivi