Resolva problemas com consultas de pools de leitura

Esta página descreve técnicas para investigar e depurar consultas que o AlloyDB para PostgreSQL envia para uma instância de conjunto de leitura:

  • Ver uma lista detalhada dos nós constituintes de um conjunto de leitura, incluindo os respetivos endereços IP.
  • Ligar diretamente a um nó para fins de depuração.
  • Examinar os registos do AlloyDB para determinar que nó específico está a processar uma consulta enviada para um conjunto de leitura.
  • Consultar os registos de toda a atividade recente de um determinado nó do conjunto de leitura.
  • Ver Google Cloud métricas associadas a um nó do conjunto de leitura.

Usadas em conjunto, estas técnicas dão-lhe acesso de diagnóstico e depuração aos seus conjuntos de leitura. Por exemplo, se um dos conjuntos de leitura do cluster estiver a usar uma quantidade invulgar de CPU durante o processamento de uma consulta de execução prolongada, estas técnicas permitem-lhe determinar que nó está a processar essa consulta e, em seguida, ligar-se diretamente a esse nó para examinar ou terminar a consulta.

Apresente os detalhes dos nós de um conjunto de leitura

Na utilização normal do AlloyDB, não precisa de conhecer as identidades nem os endereços dos nós que compõem os seus conjuntos de leitura. No entanto, quando necessário, pode ver uma lista dos nós de uma instância do conjunto de leitura. Cada nó apresentado inclui as seguintes informações úteis para diagnóstico e depuração subsequentes:

Para ver as strings de ID interno e os endereços IP dos nós de um conjunto de leitura, siga as instruções específicas do gcloud em Ver detalhes da instância, mas adicione um argumento de linha de comandos --view=FULL adicional:

gcloud

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

Substitua o seguinte:

  • READ_POOL_ID: o ID do conjunto de leitura.
  • REGION_ID: o ID da região da instância.
  • CLUSTER_ID: o ID do cluster da instância.
  • PROJECT_ID: o ID do projeto da instância.

A saída inclui uma secção etiquetada como nodes, semelhante a esta:

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

Os campos id e ip para cada entrada são especialmente relevantes para as outras técnicas descritas nesta página:

  • O campo ip mostra o endereço IP do nó na VPC do cluster.

  • O campo id contém a string do ID Google Cloud completo do nó. Apenas os últimos quatro carateres desta string aparecem nas entradas registadas de um nó.

    Por exemplo, para encontrar entradas do registo que envolvam o primeiro dos dois nós no resultado de exemplo anterior, consulte os registos usando a string de ID hcfh.

Ligue-se diretamente a um nó

Assim que souber o endereço IP de um nó, pode estabelecer ligação diretamente ao respetivo servidor PostgreSQL. Por exemplo, para usar psql para estabelecer ligação a uma VM na VPC do seu cluster, siga as instruções em Execute o cliente psql. Quando o fizer, indique o endereço IP do nó e não o da respetiva instância do conjunto de leitura:

psql -h NODE_IP_ADDRESS -U USERNAME

Encontre a atividade dos nós nos registos

O AlloyDB inclui IDs de nós em entradas de registo sobre consultas processadas por pools de leitura. Geralmente, pode usar estes IDs descobertos de duas formas:

  • Determine o IP desse nó para poder estabelecer ligação ao mesmo.
  • Efetue mais consultas de registos para saber mais sobre a atividade recente do nó.

Determine que nó está a processar uma consulta conhecida

Se souber que um determinado conjunto de leitura está a processar uma consulta de execução prolongada, o Explorador de registos pode ajudar a determinar o ID do nó específico que está a processar essa consulta.

Tenha em atenção que esta técnica só funciona em instâncias do conjunto de leitura que tenham ativado a extensão pgAudit.

  1. Visite o Explorador de registos:

    Aceda ao Explorador de registos

  2. No criador de consultas, adicione resource.labels.instance_id="READ_POOL_ID" ao campo do editor de consultas, substituindo READ_POOL_ID pelo nome da instância do seu conjunto de leitura.

  3. Adicione a declaração SQL que está a investigar, total ou parcialmente, ao campo do editor de consultas. Por exemplo: select id from MyTable. Esta entrada não é sensível a maiúsculas e minúsculas.

  4. Clique em Executar consulta.

  5. Use os controlos do Explorador de registos para ajustar e executar novamente a consulta, conforme necessário, para filtrar os resultados e obter os mais relevantes.

  6. Clique numa entrada do registo na lista de resultados para expandir a respetiva apresentação.

  7. Clique no campo labels na apresentação expandida da entrada.

  8. Tome nota do valor de NODE_ID em labels.

O resultado é o identificador de quatro carateres do nó que processa a consulta.

Estabeleça ligação a um nó mencionado numa entrada de registo

Se quiser estabelecer ligação diretamente ao servidor PostgreSQL de um nó específico com base na respetiva atividade registada, siga estes passos:

  1. Tome nota da string de ID de quatro carateres do nó registado. Pode encontrar este ID no campo NODE_ID da entrada do registo.

  2. Liste os nós para o conjunto de leitura.

  3. Nessa lista, encontre um nó com a string de ID que termina com os quatro carateres que anotou no primeiro passo. É possível que nenhum dos nós indicados corresponda.

  4. Se encontrar um nó correspondente, use o respetivo endereço IP correspondente para estabelecer ligação ao servidor PostgreSQL desse nó.

    Caso contrário, se nenhum dos nós do conjunto de leitura indicados no passo anterior tiver IDs correspondentes ao nó registado, o conjunto de leitura desativou esse nó no tempo decorrido desde a entrada de registo original. Este é o comportamento normal dos pools de leitura do AlloyDB, conforme descrito em Uma nota sobre a efemeridade dos nós. Neste caso, não pode estabelecer uma ligação direta a esse nó.

Depois de se ligar ao servidor PostgreSQL de um nó, pode usar técnicas de monitorização padrão do PostgreSQL, como pg_stat_activity, para investigar mais detalhadamente os processos atuais do nó e ajustá-los conforme necessário.

Ver mais entradas de registo sobre um nó

Para ver a atividade registada mais recente sobre um nó com um ID específico:

  1. Visite o Explorador de registos:

    Aceda ao Explorador de registos

  2. Adicione labels.NODE_ID=NODE_ID ao criador de consultas do Explorador de registos, substituindo NODE_ID pela string de ID de quatro carateres do nó.

  3. Clique em Executar consulta para ver toda a atividade desse nó no período selecionado ou ajuste a consulta para a filtrar ainda mais.

  4. Repita o passo anterior, conforme necessário, para refinar a pesquisa.

Monitorize as métricas dos nós

Pode ver as métricas associadas a nós individuais no painel de controlo Estatísticas do sistema do AlloyDB. Para mais informações sobre as métricas de nós disponíveis, consulte a referência de métricas de estatísticas do sistema.

Para saber que IDs de nós estão associados a uma determinada instância do conjunto de leitura, consulte o artigo Liste os detalhes dos nós de um conjunto de leitura.

Para aceder à documentação de referência completa destas e de outras métricas do AlloyDB, consulte alloydb em "Google Cloud métricas".

Uma nota sobre a natureza efémera dos nós

Embora possa estabelecer ligação em segurança a um nó para fins de investigação ou depuração temporários, as aplicações que usam conjuntos de leitura devem sempre estabelecer ligação a esses conjuntos ao nível da instância, usando o endereço IP que o respetivo cluster apresenta na respetiva lista de instâncias.

O AlloyDB trata os nós dos respetivos conjuntos de leitura como recursos efémeros e intercambiáveis. O serviço altera a lista de nós de um conjunto de leitura com a frequência necessária para manter essa instância do conjunto de leitura com equilíbrio de carga e responsiva. Uma aplicação que se liga diretamente a um nó do conjunto de leitura, em vez de a uma instância do conjunto de leitura, corre o risco de se desligar abruptamente da sua base de dados sempre que o AlloyDB atualiza a lista de nós da instância.

Permita sempre que as suas aplicações se liguem aos pools de leitura ao nível da instância e deixe que o AlloyDB faça o trabalho de encaminhar as suas consultas de forma eficiente para os nós adequados.

O que se segue?