Otimizar recursos e isolar consultas de leitura com o encaminhamento transparente de consultas

Para descarregar o tráfego de leitura da instância principal sem sacrificar a consistência de leitura das gravações ou modificar os endpoints de conexão do aplicativo, ative, configure e monitore o encaminhamento transparente de consultas nas instâncias do AlloyDB para PostgreSQL. O encaminhamento transparente de consultas intercepta consultas somente leitura no nó principal e as encaminha seletivamente para instâncias de pool de leitura subutilizadas, retornando resultados consistentes com a execução do nó principal.

encaminhamento de consulta transparente

O encaminhamento transparente de consultas é mais adequado para os seguintes cenários:

  • Cargas de trabalho híbridas (HTAP): você executa consultas de relatórios ou análises, com consistência de leitura de gravações, no mesmo banco de dados que processa transações e quer evitar que leituras caras afetem a latência de gravação.
  • Aplicativos monolíticos: você quer usar a capacidade do pool de leitura sem refatorar o aplicativo para usar endpoints de leitura e gravação separados, mas ainda precisa de consistência estrita de leitura das suas gravações.
  • Gerenciamento dinâmico de carga: você tem picos imprevisíveis no tráfego de leitura e quer que o banco de dados descarregue automaticamente o trabalho para os nós do pool de leitura quando o nó principal estiver sob carga pesada com consistência de leitura das suas gravações.

Antes de começar

  • Verifique se o cluster do AlloyDB é compatível com o PostgreSQL 17 ou 18.

  • É necessário ter pelo menos uma instância de pool de leitura ativa configurada no cluster do AlloyDB. Para informações sobre como criar ou verificar instâncias de pool de leitura, consulte Criar uma instância de pool de leitura em um cluster e Ver detalhes da instância.

Funções exigidas

Ativar o encaminhamento de consultas transparente

O encaminhamento transparente de consultas está desativado por padrão. É possível ativá-lo dinamicamente no nível da sessão ou do banco de dados sem reiniciar o banco de dados.

Ativar no nível da sessão

Para ativar o encaminhamento transparente de consultas na sessão atual, execute o seguinte comando SQL:

SET alloydb.enable_query_forwarding = TRUE;

Ativar no nível do banco de dados

Para ativar o encaminhamento transparente de consultas em um banco de dados específico, execute o seguinte comando SQL:

ALTER DATABASE DATABASE_NAME SET alloydb.enable_query_forwarding = ON;

Substitua DATABASE_NAME pelo nome do banco de dados.

Condições de qualificação da consulta

  • O encaminhamento transparente de consultas se aplica apenas a instruções SELECT somente leitura.
  • A consulta não pode usar bloqueios no nível da linha, como os usados em SELECT ... FOR UPDATE.
  • O encaminhamento transparente de consultas tem suporte limitado para instruções SELECT em transações de várias instruções.
  • As consultas não podem fazer referência a tabelas temporárias, não registradas ou de catálogo.
  • A consulta precisa seguir as seguintes restrições de função:
    • A consulta não pode conter funções voláteis ou funções definidas pelo usuário (UDFs).
    • A consulta não pode conter funções de valor SQL, como CURRENT_DATE, LOCALTIME, USER ou CURRENT_SCHEMA.
    • A consulta não pode conter expressões NEXTVAL().
    • A consulta não pode conter procedimentos ou funções SQL.
  • Todas as colunas de resultado precisam usar tipos de dados que implementem funções de envio e recebimento binárias.
  • Uma consulta só é qualificada para encaminhamento se o custo de overhead for mínimo em comparação com o custo total da consulta. Isso significa que as consultas que usam verificações de índice geralmente são excluídas, já que a sobrecarga delas costuma exceder o custo da consulta em si.
  • Não é possível encaminhar para um nó de espera ativa do AlloyDB. Um nó de espera ativa do AlloyDB é um nó secundário dedicado para instâncias primárias de alta disponibilidade (HA).
  • A consulta precisa usar o protocolo de consulta simples. O protocolo de consulta estendido não é compatível.

Verificar a qualificação da consulta com EXPLAIN

No exemplo a seguir, large_table é uma tabela em um banco de dados com muitas linhas. Para verificar se uma consulta específica está qualificada para encaminhamento na configuração atual, execute o comando EXPLAIN:

EXPLAIN SELECT count(*) FROM large_table t1, large_table t2;

Se a consulta for qualificada, a saída vai incluir uma instrução de status de encaminhamento de consulta após o plano de execução padrão do Postgres. Se essa instrução estiver ausente, a consulta não será qualificada para encaminhamento e será executada localmente no primário.

Aggregate  (cost=25000.00..25000.01 rows=1 width=8)
  ->  Nested Loop  (cost=0.00..20000.00 rows=1000000 width=0)
        ... [Standard Postgres Plan Steps] ...
Query Forwarding: Eligible. (overhead=1250.02)

Na resposta de saída, Eligible indica que a consulta atende aos critérios padrão de SQL somente leitura e que a análise de custo-benefício favorece o roteamento para uma instância de pool de leitura. O parâmetro overhead indica o custo calculado do planejador para encaminhar a consulta a uma instância do pool de leitura, incluindo a sobrecarga de estabelecer a conexão e restaurar snapshots na réplica.

Monitorar métricas de encaminhamento de consultas

Para verificar se o encaminhamento transparente de consultas está funcionando na sua carga de trabalho, acompanhe a seguinte métrica no Cloud Monitoring:

Métrica Descrição Detalhes
alloydb.googleapis.com/internal/database/postgresql/workload/distributed/tqf_query_count A contagem cumulativa de consultas processadas pelo encaminhamento transparente de consultas. Nome de exibição:contagem de consultas TQF
Tipo de métrica:CUMULATIVE
Tipo de valor:INT64
Rótulos:
status: processamento de consultas se o encaminhamento transparente de consultas estiver ativado. Esse rótulo registra um dos seguintes valores:
  • completed: executado em uma instância do pool de leitura.
  • fallback: executado na instância principal.
  • disqualified: não foi possível encaminhar.

A seguir