Todos os produtos
Search
Central de documentação

PolarDB:Global plan cache (GPC)

Última atualização: Jun 28, 2026

O Global plan cache (GPC) permite que conexões no PolarDB for PostgreSQL compartilhem planos de execução. Isso reduz a sobrecarga de memória por conexão e o custo de geração repetida de planos.

Como o GPC funciona

No PostgreSQL padrão, cada conexão mantém seu próprio cache de planos. Em grande escala, com centenas ou milhares de conexões simultâneas executando as mesmas consultas, cada conexão compila e armazena independentemente um plano idêntico. Esse comportamento multiplica o consumo de memória proporcionalmente ao número de conexões e aumenta o risco de erros de falta de memória (OOM).

O GPC transfere o armazenamento de planos para a memória compartilhada. Assim que uma conexão compila um plano, todas as conexões com a mesma chave de consulta o reutilizam diretamente, sem recompilação. O resultado é menor uso agregado de memória e execução mais rápida de consultas para instruções preparadas.

Os planos são compartilhados quando suas chaves de consulta correspondem. Uma chave de consulta consiste em:

  • Texto da consulta

  • ID do banco de dados

  • Caminho de busca

  • ID do usuário

Versões compatíveis

O GPC está disponível nas seguintes versões do PolarDB for PostgreSQL:

Versão do PostgreSQL

Versão secundária mínima do mecanismo

PostgreSQL 18

2.0.18.0.1.0

PostgreSQL 17

2.0.17.2.1.0

PostgreSQL 16

2.0.16.3.1.1

PostgreSQL 15

2.0.15.7.1.1

PostgreSQL 14

2.0.14.9.15.0

PostgreSQL 11

2.0.11.9.28.0

Para verificar sua versão secundária do mecanismo, execute SHOW polardb_version; ou visualize-a no console. Caso seu cluster não atenda ao requisito, atualize a versão secundária do mecanismo.

O GPC vem ativado por padrão em clusters que atendem aos requisitos de versão.

Limitações

  • O GPC oferece suporte apenas a instruções preparadas. Não há suporte para cache de planos em cenários PL/SQL.

  • Somente as instruções SELECT, INSERT, UPDATE e DELETE têm suporte.

  • Não há suporte para tabelas temporárias.

Parâmetros

Parâmetro

Descrição

Padrão

Dinâmico

polar_gpc_mem

Memória compartilhada alocada para o GPC, em MB. Não deve exceder shared_buffer. Defina como 0 ou um valor negativo para desativar o GPC. Requer reinicialização do cluster para entrar em vigor.

30 MB

Não

polar_enable_gpc_level

Escopo em que o GPC está ativo. 0: desativado. 1: apenas nós somente leitura (RO). 2: nó primário (RW) e nós somente leitura.

0

Sim

polar_gpc_clean_timeout

Frequência de remoção de entradas do GPC pouco utilizadas, em segundos. Intervalo: de 0 segundos a 24 horas.

1800 s

Sim

polar_worker.gpc_clear_interval

Frequência de limpeza de entradas inválidas do GPC, em segundos. Máximo: (2^32 − 1) / 1000 segundos.

60 s

Sim

polar_gpc_clean_max

Quantidade de entradas do GPC limpas por ciclo de remoção. Intervalo: 10–10000.

100

Sim

polar_gpc_partitions

Número de tabelas hash usadas para armazenar entradas do GPC. Intervalo: 1–1024. Requer reinicialização do cluster para entrar em vigor.

32

Não

polar_gpc_entries

Limite máximo de entradas por tabela hash. Intervalo: 1–10000. Requer reinicialização do cluster para entrar em vigor.

1024

Não

Interação entre polar_gpc_mem e polar_enable_gpc_level:

  • O GPC fica ativo somente quando polar_gpc_mem > 0 e polar_enable_gpc_level > 0.

  • Se polar_gpc_mem > 0, mas polar_enable_gpc_level = 0, as consultas existentes continuam usando planos em cache, porém novas consultas não são armazenadas em cache.

  • Quando a memória compartilhada estiver cheia, novos planos serão armazenados localmente por sessão. Após a limpeza de entradas do GPC inválidas ou pouco utilizadas e a liberação de memória, o sistema move esses planos locais para o GPC.

Monitorar e gerenciar o GPC

A extensão polar_gpc fornece as visualizações de monitoramento e as funções de gerenciamento do GPC. Instale-a uma vez por banco de dados:

CREATE EXTENSION IF NOT EXISTS polar_gpc;

Visualizações

polar_stat_gpc — Estatísticas gerais de uso do GPC

SELECT * FROM polar_stat_gpc;

Coluna

Descrição

get

Total de tentativas de recuperar uma entrada correspondente do GPC

hit

Quantidade de vezes em que uma entrada correspondente foi encontrada no GPC

store

Número de planos salvos com sucesso no GPC

store_failed

Contagem de falhas ao salvar um plano devido a erro temporário de OOM no GPC. Um aumento consistente indica que polar_gpc_mem está configurado com valor muito baixo.

store_exists

Vezes em que o sistema tentou adicionar um plano local ao GPC, mas outra sessão já o havia armazenado

polar_gpc_plan — Uso de memória por entrada

SELECT * FROM polar_gpc_plan;

Coluna

Descrição

plan_id

ID do plano de execução

stmt_name

Nome da instrução preparada

query

Texto da consulta

used_cnt

Total de utilizações do plano

last_use_time

Timestamp da utilização mais recente

is_valid

Indica se o plano é válido atualmente

polar_gpc_plan_mcxt — Detalhes de MemoryContext por entrada

SELECT * FROM polar_gpc_plan_mcxt;

Coluna

Descrição

plan_id

ID do plano de execução

mcxt_name

Nome do MemoryContext

totalspace

Memória total alocada

freespace

Memória disponível dentro do contexto

used

Memória em uso

nblocks

Quantidade de blocos de memória

polar_gpc_plan_key — Chaves de consulta para cada entrada do GPC

SELECT * FROM polar_gpc_plan_key;

Coluna

Descrição

plan_id

ID do plano

query

Texto da consulta

dbid

ID do banco de dados

pid

ID do processo

num_params

Quantidade de parâmetros na consulta

search_path

Caminho de busca no momento em que o plano foi armazenado

role_id

ID do usuário

polar_prepared_statement — Todas as instruções preparadas no GPC

SELECT * FROM polar_prepared_statement;

Coluna

Descrição

is_saved

Indica se o plano de execução está salvo no GPC

is_valid

Indica se o plano é válido atualmente

cacheable

Indica se o plano é elegível para cache

Funções

Limpar entradas inválidas do GPC

SELECT polar_gpc_evict_invalid_gpc();

Remove imediatamente as entradas inválidas do GPC. Se não for chamada manualmente, o sistema as limpa automaticamente no intervalo definido por polar_worker.gpc_clear_interval.

Remover entradas do GPC pouco utilizadas

SELECT polar_gpc_evict_live_gpc();

Remove imediatamente as entradas do GPC que não foram usadas recentemente. Caso não seja chamada manualmente, o sistema as remove automaticamente no intervalo definido por polar_worker.gpc_clear_interval.

Próximos passos