Resolver problemas de consultas em pools de leitura

Para investigar e depurar consultas que o AlloyDB para PostgreSQL encaminha para uma instância do pool de leitura, use as seguintes técnicas de diagnóstico:

  • Confira uma lista detalhada dos nós constituintes de um pool de leitura, incluindo os endereços IP.
  • Conectar-se diretamente a um nó de pool de leitura individual para depuração.
  • Analise os registros do AlloyDB para identificar qual nó está processando uma consulta específica.
  • Consulte os registros de todas as atividades recentes de um nó específico do pool de leitura.
  • Ver as métricas do Google Cloud associadas a um nó do pool de leitura.

Usadas em conjunto, essas técnicas dão acesso de diagnóstico e depuração aos pools de leitura. Por exemplo, se um dos pools de leitura do cluster estiver usando uma quantidade incomum de CPU ao processar uma consulta de longa duração, essas técnicas permitem determinar qual nó está processando essa consulta e, em seguida, conectar-se 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 os endereços dos nós que compõem os pools de leitura. No entanto, quando necessário, é possível ver uma lista dos 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 ver as strings de ID interno e os endereços IP dos nós de um pool de leitura, siga as instruções específicas do gcloud em Ver detalhes da instância, mas adicione um argumento de linha de comando --view=FULL extra:

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 chamada 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 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 rede VPC do cluster.

  • O campo id contém a string de ID Google Cloud completa do nó. Somente os quatro caracteres finais dessa string aparecem nas entradas de registro de um nó.

    Por exemplo, para encontrar entradas de registro que envolvem o primeiro dos dois nós na saída de amostra 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ó, é possível se conectar diretamente ao servidor PostgreSQL dele. Por exemplo, para usar psql para se conectar a uma VM na rede VPC do cluster, siga as instruções em Executar o cliente psql. Nesse caso, forneça o endereço IP do nó em vez do endereço da instância do pool de leitura:

psql -h NODE_IP_ADDRESS -U USERNAME

Encontrar atividades de nós 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.
  • Faça mais 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, use a Análise de registros para determinar o ID do nó específico que está processando essa consulta.

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

  1. Acesse a Análise de registros:

    Acessar a Análise 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, no todo ou em parte, 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 da Análise de registros 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 está 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 pool de leitura listados na etapa anterior tiver IDs correspondentes ao nó registrado, o pool de leitura terá desativado esse nó no tempo decorrido desde a entrada de registro original. Esse é o comportamento normal dos pools de leitura do AlloyDB, conforme descrito em Uma observação sobre a efemeridade 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ó, use técnicas de monitoramento padrão do PostgreSQL, como pg_stat_activity, para investigar melhor os processos atuais do nó e ajustá-los conforme necessário.

Ver mais entradas de registro sobre um nó

Para ver as atividades registradas mais recentes de um nó com um ID específico:

  1. Acesse a Análise de registros:

    Acessar a Análise de registros.

  2. Adicione labels.NODE_ID=NODE_ID ao criador de consultas da Análise de registros, substituindo NODE_ID pela string de ID de quatro caracteres do nó.

  3. Clique em Executar consulta para ver todas as atividades desse nó na janela de tempo selecionada ou ajuste a consulta para filtrá-la ainda mais.

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

Monitorar métricas de nós

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

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

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

Observação sobre a efemeridade do nó

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

O AlloyDB trata os nós dos pools de leitura como recursos temporários e intercambiáveis. O serviço altera a lista de nós de um pool de leitura com a frequência necessária para manter a instância do pool de leitura com balanceamento de carga 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 maneira eficiente para os nós adequados.

A seguir