Resolver problemas de consultas em pools de leitura

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

  • Uma lista detalhada dos nós constituintes de um pool de leitura, incluindo os endereços IP.
  • Conectar-se diretamente a um nó para fins de depuração.
  • Examinar os registros do AlloyDB para determinar qual nó específico está processando uma consulta enviada para um pool de leitura.
  • Consultar os registros de todas as atividades recentes de um determinado nó de pool de leitura.
  • Visualização de métricas Google Cloud associadas a um nó de pool de leitura.

Usadas em conjunto, essas técnicas dão acesso de diagnóstico e depuração aos seus pools de leitura. Por exemplo, se um dos pools de leitura do cluster estiver usando uma quantidade incomum de CPU durante o processamento de uma consulta de longa duração, essas técnicas permitem determinar qual nó está processando essa consulta e, em seguida, se conectar diretamente a esse nó para examinar ou encerrar a consulta.

Listar detalhes dos nós de um pool de leitura

No uso normal do AlloyDB, não é necessário saber as identidades ou endereços dos nós que compõem os pools de leitura. No entanto, quando necessário, você pode conferir uma lista de nós de uma instância de pool de leitura. Cada nó listado inclui as seguintes informações úteis para diagnóstico e depuração subsequentes:

Para conferir as strings de ID internas e os endereços IP dos nós de um pool de leitura, siga as instruções específicas de gcloud em Conferir detalhes da instância, mas adicione outro argumento de linha de comando --view=FULL:

gcloud

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

Substitua:

  • READ_POOL_ID: o ID do pool 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 seção com o rótulo nodes, semelhante a este:

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 de 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 Google Cloud ID completa do nó. Somente os quatro últimos caracteres dessa string aparecem nas entradas registradas de um nó.

    Por exemplo, para encontrar entradas de registro que envolvam o primeiro dos dois nós na saída de exemplo anterior, consulte os registros usando a string de ID hcfh.

Conectar-se diretamente a um nó

Depois de saber o endereço IP de um nó, você pode se conectar diretamente ao servidor PostgreSQL dele. Por exemplo, para usar psql para se conectar a uma VM na VPC do cluster, siga as instruções em Executar o cliente psql. Ao fazer isso, forneça o endereço IP do nó, e não o da instância do pool de leitura:

psql -h NODE_IP_ADDRESS -U USERNAME

Encontrar a atividade do nó nos registros

O AlloyDB inclui IDs de nó em entradas de registro sobre consultas processadas por pools de leitura. De modo geral, é possível usar esses IDs descobertos de duas maneiras:

  • Determine o IP do nó para se conectar a ele.
  • Execute outras consultas de registro para saber mais sobre a atividade recente do nó.

Determinar qual nó está processando uma consulta conhecida

Se você souber que um determinado pool de leitura está processando uma consulta de longa duração, o Log Explorer poderá ajudar a determinar o ID do nó específico que processa essa consulta.

Essa técnica só funciona em instâncias de pool de leitura que tiverem ativado a extensão pgAudit.

  1. Acesse o Explorador de registros:

    Acesse o Explorador de registros

  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 pool de leitura.

  3. Adicione a instrução SQL que você está investigando, totalmente ou parcialmente, ao campo do editor de consultas. Por exemplo, select id from MyTable. Essa entrada não diferencia maiúsculas de minúsculas.

  4. Clique em Executar consulta.

  5. Use os controles do Log Explorer para ajustar e executar novamente a consulta conforme necessário para filtrar os resultados mais relevantes.

  6. Clique em uma entrada de registro na lista de resultados para expandir a exibição.

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

  8. Anote o valor de NODE_ID em labels.

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

Conectar-se a um nó mencionado em uma entrada de registro

Se você quiser se conectar diretamente ao servidor PostgreSQL de um nó específico com base na atividade registrada, siga estas etapas:

  1. Anote a string de ID de quatro caracteres do nó registrado. Esse ID pode ser encontrado no campo NODE_ID da entrada de registro.

  2. Liste os nós do pool de leitura.

  3. Nessa lista, encontre um nó com a string de ID que termina com os quatro caracteres que você anotou na primeira etapa. É possível que nenhum dos nós listados corresponda.

  4. Se você encontrar um nó correspondente, use o endereço IP correspondente para se conectar ao servidor PostgreSQL desse nó.

    Caso contrário, se nenhum dos nós do conjunto de leitura listados na etapa anterior tiver IDs correspondentes ao nó registrado, o conjunto de leitura desativará esse nó no tempo decorrido desde a entrada de registro original. Esse é um comportamento normal para pools de leitura do AlloyDB, conforme descrito em Uma observação sobre a natureza efêmera do nó. Nesse caso, não é possível estabelecer uma conexão direta com esse nó.

Depois de se conectar ao servidor PostgreSQL de um nó, você pode usar técnicas padrão de monitoramento do PostgreSQL, como pg_stat_activity, para investigar os processos atuais do nó e ajustá-los conforme necessário.

Conferir mais entradas de registro sobre um nó

Para conferir a atividade registrada mais recente sobre um nó com um ID específico:

  1. Acesse o Explorador de registros:

    Acesse o Explorador de registros

  2. Adicione labels.NODE_ID=NODE_ID ao Criador de consultas do Explorador de registros, substituindo NODE_ID pela string de ID de quatro caracteres do nó.

  3. Clique em Executar consulta para conferir toda a atividade desse nó na janela de tempo selecionada ou ajuste a consulta para filtrar ainda mais.

  4. Repita a etapa anterior conforme necessário para refinar sua pesquisa.

Monitorar métricas do nó

É possível conferir as métricas associadas a nós individuais no painel "Insights do sistema do AlloyDB". Para mais informações sobre as métricas de nó disponíveis, consulte a Referência de métricas de insights do sistema.

Para saber quais IDs de nó estão associados a uma instância de pool de leitura específica, consulte Listar detalhes dos nós de um pool de leitura.

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

Observação sobre a natureza temporária dos nós

Embora seja possível se conectar com segurança a um nó para fins de investigação temporária ou depuração, os aplicativos que usam pools de leitura sempre precisam se conectar a esses pools no nível da instância, usando o endereço IP que o cluster mostra na lista de instâncias.

O AlloyDB trata os nós dos pools de leitura como recursos intercambiáveis e temporários. O serviço muda a lista de nós de um pool de leitura tantas vezes quanto for necessário para manter a instância do pool de leitura equilibrada e responsiva. Um aplicativo que se conecta diretamente a um nó de pool de leitura, em vez de uma instância de pool de leitura, corre o risco de se desconectar abruptamente do banco de dados sempre que o AlloyDB atualizar a lista de nós da instância.

Sempre permita que seus aplicativos se conectem aos pools de leitura no nível da instância e deixe que o AlloyDB faça o trabalho de rotear suas consultas de forma eficiente para os nós corretos.

A seguir