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

Nesta página, descrevemos como ativar, configurar e monitorar o encaminhamento transparente de consultas nas instâncias do AlloyDB para PostgreSQL. O encaminhamento transparente de consultas é um recurso inteligente de otimização de recursos que permite ao nó principal interceptar consultas somente leitura e encaminhá-las seletivamente para instâncias de pool de leitura subutilizadas, mantendo a consistência de leitura após gravação. As consultas encaminhadas para o pool de leitura geram resultados consistentes com a execução do nó principal.

encaminhamento transparente de consultas

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 analíticas, com consistência de leitura após gravação, 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 separados de leitura e gravação, mas ainda precisa de consistência estrita de leitura e gravação.
  • 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 após gravação.

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

  • Verifique se você tem a função de banco de dados alloydbsuperuser ou se fez login como o usuário padrão postgres.

Ativar o encaminhamento de consultas transparente

O encaminhamento transparente de consultas fica desativado por padrão. É possível ativar 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 sua 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 seu 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 com 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 obedecer às seguintes restrições de função:
    • A consulta não pode conter funções voláteis nem 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 implementam funções binárias de envio e recebimento.
  • Uma consulta só se qualifica para encaminhamento se o custo indireto for mínimo em comparação com o custo total dela. 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 própria consulta.
  • 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 principais de alta disponibilidade (HA).

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 sua 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 declaração de status de encaminhamento de consulta após o plano de execução padrão do Postgres. Se essa instrução estiver faltando, a consulta não vai se qualificar 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 encaminhamento para uma instância de pool de leitura. O parâmetro overhead indica o custo calculado do planejador de encaminhar a consulta para uma instância de 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 em toda a 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