Todos os produtos
Search
Central de documentação

PolarDB:**Global plan cache (GPC)**

Última atualização: Aug 25, 2026

Este tópico descreve o recurso de global plan cache (GPC) do PolarDB for PostgreSQL.

Informações básicas

Nas versões anteriores do PolarDB, o cache de planos estava vinculado a prepared statements. Essa abordagem apresentava duas desvantagens:

  • Os caches de planos ficavam isolados em conexões individuais e não podiam ser compartilhados.

  • Cada conexão mantinha seu próprio cache de planos, o que resultava em alto consumo de memória.

O PolarDB for PostgreSQL introduz o recurso GPC para resolver esses problemas, permitindo que diferentes conexões compartilhem o mesmo cache de planos.

É possível compartilhar planos entre diferentes prepared statements e conexões. Para aplicações com muitas instruções SQL distintas, o GPC reduz significativamente o uso de memória e diminui o risco de erros de falta de memória (OOM). Esse mecanismo eficiente de cache de planos também reduz o custo de geração de planos de execução, melhorando o desempenho.

O compartilhamento de planos ocorre apenas quando as chaves de consulta são idênticas. Uma chave de consulta consiste nas seguintes partes:

  • Texto da consulta.

  • ID do banco de dados.

  • Caminho de busca de objetos.

  • ID do usuário.

Aplicabilidade

  • O recurso está disponível para as seguintes versões do PolarDB for PostgreSQL:

    • PostgreSQL 18 (versão secundária do mecanismo 2.0.18.0.1.0 ou posterior)

    • PostgreSQL 17 (versão secundária do mecanismo 2.0.17.2.1.0 ou posterior)

    • PostgreSQL 16 (versão secundária do mecanismo 2.0.16.3.1.1 ou posterior)

    • PostgreSQL 15 (versão secundária do mecanismo 2.0.15.7.1.1 ou posterior)

    • PostgreSQL 14 (versão secundária do mecanismo 2.0.14.9.15.0 ou posterior)

    • PostgreSQL 11 (versão secundária do mecanismo 2.0.11.9.28.0 ou posterior)

    Nota

    Visualize a minor engine version number no console ou execute a instrução SHOW polardb_version;. Caso seu cluster não atenda ao requisito de versão secundária do mecanismo, upgrade the minor engine version.

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

Limites

  • O GPC oferece suporte apenas a prepared statements. Não há suporte para cache de planos em cenários PL/SQL.

  • Há suporte apenas para as instruções SELECT, INSERT, UPDATE e DELETE.

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

Parâmetros

Parâmetro

Descrição

polar_gpc_mem

Defina o tamanho de memória para o GPC. Unidade: MB. O valor padrão é 30 MB. O valor não pode exceder o tamanho de shared_buffer.

Nota
  • Reinicie o cluster para que a modificação do parâmetro tenha efeito.

  • Se polar_gpc_mem for menor ou igual a 0, o recurso GPC será desativado. Se polar_gpc_mem for maior que 0, o cluster reservará a quantidade especificada de memória compartilhada na inicialização. Caso a memória compartilhada seja insuficiente, novos caches de planos serão armazenados temporariamente de forma local. Quando entradas do GPC pouco utilizadas ou inválidas forem limpas, a memória compartilhada será liberada. O sistema então tentará mover os caches de planos locais para o GPC.

polar_enable_gpc_level

Nível em que o recurso GPC é ativado. Este parâmetro pode ser modificado dinamicamente. Valores válidos:

  • 0 (Padrão): O GPC não é utilizado.

  • 1: O GPC é usado apenas em nós somente leitura (RO).

  • 2: O GPC é usado tanto no nó primário (RW) quanto nos nós somente leitura.

Nota
  • Este parâmetro deve ser usado em conjunto com polar_gpc_mem. O GPC funciona apenas quando polar_gpc_mem é maior que 0 e polar_enable_gpc_level é maior que 0.

  • Se polar_gpc_mem for maior que 0 e polar_enable_gpc_level for 0, as consultas existentes poderão continuar usando o GPC, mas novas consultas não poderão.

polar_gpc_clean_timeout

Intervalo de tempo para limpar entradas do GPC pouco utilizadas. Este parâmetro pode ser modificado dinamicamente. Unidade: segundos. O valor padrão é 1.800 segundos. O valor pode variar de 0 segundos a 24 horas.

polar_worker.gpc_clear_interval

Intervalo de tempo para limpar entradas inválidas do GPC. Este parâmetro pode ser modificado dinamicamente. Unidade: segundos. O valor padrão é 60 segundos. O valor máximo é (2^32 - 1)/1.000.

polar_gpc_clean_max

Quantidade de entradas do GPC a serem limpas por vez. Este parâmetro pode ser modificado dinamicamente. O valor padrão é 100. O intervalo de valores vai de 10 a 10.000.

polar_gpc_partitions

Número de tabelas hash usadas para armazenar entradas do GPC. O valor padrão é 32. O intervalo de valores vai de 1 a 1.024.

Nota

Reinicie o cluster para que a modificação do parâmetro tenha efeito.

polar_gpc_entries

Número máximo de entradas em cada tabela hash. O valor padrão é 1.024. O intervalo de valores vai de 1 a 10.000.

Nota

Reinicie o cluster para que a modificação do parâmetro tenha efeito.

Guia de uso

As visualizações e funções de monitoramento do recurso GPC estão incluídas na extensão polar_gpc. Execute o comando abaixo para criar essa extensão.

CREATE EXTENSION IF NOT EXISTS polar_gpc;

Visualizações

polar_stat_gpc - Visualizar o uso geral do GPC

Verifique o uso geral do GPC por meio da visualização polar_stat_gpc conforme mostrado abaixo:

SELECT * FROM polar_stat_gpc;

As principais métricas na visualização polar_stat_gpc incluem:

  • get: Quantidade de tentativas de recuperar uma entrada correspondente no GPC.

  • hit: Número de vezes em que uma entrada correspondente foi encontrada no GPC.

  • store: Total de vezes que um plano foi salvo com sucesso no GPC.

  • store_failed: Contagem de falhas ao armazenar um plano devido a erros temporários de falta de memória no GPC. Um aumento frequente nesse valor indica que o parâmetro polar_gpc_mem está configurado com um valor muito baixo.

  • store_exists: Número de vezes que o sistema tentou adicionar um cache de planos local ao GPC, mas constatou que outra sessão já havia adicionado o plano.

polar_gpc_plan - Visualizar o uso de memória de cada entrada do GPC

Consulte a visualização polar_gpc_plan para verificar o uso de memória de cada entrada do GPC. Exemplo:

SELECT * FROM polar_gpc_plan;

As principais métricas na visualização polar_gpc_plan incluem:

  • plan_id: ID do plano de execução.

  • stmt_name: Nome da prepared statement.

  • query: Instrução de consulta.

  • used_cnt: Quantidade de vezes que o plano foi utilizado.

  • last_use_time: Momento da última utilização da entrada do GPC.

  • is_valid: Indica se o plano é válido.

polar_gpc_plan_mcxt - Visualizar informações de MemoryContext para cada entrada do GPC

Consulte a visualização polar_gpc_plan_mcxt para ver as informações de MemoryContext de cada entrada do GPC. Exemplo:

SELECT * FROM polar_gpc_plan_mcxt;

As principais métricas na visualização polar_gpc_plan_mcxt incluem:

  • plan_id: ID do plano de execução.

  • mcxt_name: Nome do MemoryContext.

  • totalspace: Espaço total de memória.

  • freespace: Espaço de memória disponível.

  • used: Espaço de memória utilizado.

  • nblocks: Número de blocos.

polar_gpc_plan_key - Visualizar a chave do GPC para cada entrada

Consulte a visualização polar_gpc_plan_key para ver a chave do GPC de cada entrada. Essa chave é usada para encontrar entradas correspondentes no GPC. Exemplo:

SELECT * FROM polar_gpc_plan_key;

As principais métricas na visualização polar_gpc_plan_key incluem:

  • plan_id: ID do plano.

  • query: Instrução de consulta.

  • dbid: ID do banco de dados.

  • pid: ID do processo.

  • num_params: Quantidade de parâmetros na instrução de consulta.

  • search_path: Caminho de busca.

  • role_id: ID do usuário.

polar_prepared_statement - Visualizar informações sobre todas as prepared statements no GPC

Consulte a visualização polar_prepared_statement para ver informações sobre todas as prepared statements no GPC. Exemplo:

SELECT * FROM polar_prepared_statement;

As principais métricas na visualização polar_prepared_statement incluem:

  • is_saved: Indica se o plano de execução da prepared statement está salvo no GPC.

  • is_valid: Indica se o plano é válido.

  • cacheable: Indica se o plano pode ser armazenado em cache.

Funções

polar_gpc_evict_invalid_gpc - Limpar manualmente entradas inválidas do GPC

Utilize a função polar_gpc_evict_invalid_gpc para limpar manualmente as entradas inválidas do GPC. Exemplo:

SELECT polar_gpc_evict_invalid_gpc();

Caso você não chame essa função, o sistema limpará automaticamente as entradas inválidas do GPC no intervalo especificado pelo parâmetro $polar_worker.gpc_clear_interval.

polar_gpc_evict_live_gpc - Remover manualmente entradas do GPC pouco utilizadas

Utilize a função polar_gpc_evict_live_gpc para remover manualmente entradas do GPC que são pouco utilizadas. Exemplo:

SELECT polar_gpc_evict_live_gpc(); 

Caso você não chame essa função, o sistema removerá automaticamente as entradas do GPC pouco utilizadas no intervalo especificado pelo parâmetro $polar_worker.gpc_clear_interval.