Todos os produtos
Search
Central de documentação

PolarDB:Global metadata cache (Global Cache)

Última atualização: Aug 25, 2026

Este tópico apresenta informações básicas sobre o cache global de metadados (Global Cache) e explica como utilizá-lo.

Aplicabilidade

Este recurso é compatível com o PolarDB for PostgreSQL que executa o PostgreSQL 14 com versão secundária do mecanismo 2.0.14.8.11.0 ou posterior.

Nota

Você pode visualizar o número da versão secundária do mecanismo no console ou executando a instrução SHOW polardb_version;. Caso a versão secundária do mecanismo não atenda ao requisito, você pode atualizar a versão secundária do mecanismo.

Informações básicas

Para melhorar a eficiência do acesso aos metadados, o PostgreSQL utiliza múltiplos caches de metadados em cada processo:

  • RelCache (Relation Descriptor Cache): armazena descritores de relações em cache.

  • CatCache/SysCache (System Catalog Cache): armazena tabelas do sistema em cache.

O RelCache e o CatCache são privados para cada processo. Consequentemente, quando um banco de dados possui muitas conexões ou objetos, como tabelas, visualizações e índices, a instância de banco de dados consome uma grande quantidade de memória.

O cache global de metadados (Global Cache) é um termo coletivo para os caches de metadados que residem na memória compartilhada do e do PolarDB for PostgreSQL. O Global Cache permite que todos os processos compartilhem as mesmas entradas de cache, o que melhora a utilização da memória e reduz o risco de erros de falta de memória (OOM). Atualmente, o Global Cache inclui:

  • Global RelCache: um cache global de descritores de relações correspondente ao RelCache.

  • Global CatCache: um cache global de tabelas do sistema correspondente ao CatCache/SysCache.

RelCache

O RelCache reorganiza e armazena em memória todos os metadados relacionados a uma tabela, incluindo visualizações, índices e tabelas TOAST, para garantir acesso mais eficiente. Durante todas as etapas do processamento de SQL, como na recuperação de informações de colunas, índices ou tabelas particionadas, o sistema acessa o RelCache diretamente. Se ocorrer uma falha de cache no RelCache, o sistema consulta as tabelas do sistema e carrega os dados na memória.

O RelCache no PostgreSQL nativo não possui mecanismo de evicção. Normalmente, após o primeiro acesso, o RelCache retém os dados no cache até o encerramento do processo. Alternativamente, se uma operação de Linguagem de Definição de Dados (DDL) modificar os metadados da tabela, ela transmite uma mensagem de invalidação de cache. Ao receber essa mensagem, o RelCache remove o objeto invalidado da memória.

CatCache

O CatCache armazena tuplas das tabelas do sistema. Sobreposto ao CatCache, existe outra camada chamada SysCache, que fornece uma interface chave-valor (KV). Essencialmente, o CatCache e o SysCache trabalham juntos para reorganizar os dados das tabelas do sistema em formato KV na memória, simplificando as consultas. Por exemplo, durante o processamento de SQL, como na recuperação de um nome pelo identificador de objeto (OID) ou na busca do número de parâmetros de uma função pelo OID, o sistema acessa o CatCache diretamente. Se ocorrer uma falha de cache no CatCache, os dados serão carregados das tabelas do sistema. Os processos de carregamento e invalidação do CatCache são praticamente idênticos aos do RelCache.

Descrições dos parâmetros

Parâmetro

Nível

Descrição

polar_enable_global_catcache

PGC_USERSET

Ativa ou desativa o Global CatCache. Valores válidos:

  • on (padrão): ativa o recurso Global CatCache.

  • off: desativa o recurso Global CatCache.

polar_enable_global_relcache

PGC_USERSET

Ativa ou desativa o Global RelCache. Valores válidos:

  • on (padrão): ativa o recurso Global RelCache.

  • off: desativa o recurso Global RelCache.

polar_sgc_max_size

PGC_POSTMASTER

Defina o tamanho total do Global Cache. Faixa de valores: 0 a INT_MAX. O valor padrão é 72 MB. É necessário reiniciar para que a modificação tenha efeito.

polar_global_catcache_size

PGC_SIGHUP

Defina o tamanho do Global CatCache. Faixa de valores: 0 até o valor de polar_sgc_max_size. O valor padrão é 32 MB.

polar_global_relcache_size

PGC_SIGHUP

Defina o tamanho do Global RelCache. Faixa de valores: 0 até o valor de polar_sgc_max_size. O valor padrão é 32 MB.

Nota

É possível aumentar ou reduzir a capacidade de cada Global Cache online, desde que não ultrapasse o valor de polar_sgc_max_size. Isso oferece flexibilidade para diferentes cenários de negócios. Ao utilizar este recurso, observe o seguinte:

  • Garanta que o Global Cache tenha capacidade suficiente. O sistema acessa o cache frequentemente durante todas as etapas do processamento de SQL. Se a capacidade for insuficiente, a evicção será acionada. Quando os dados removidos forem acessados novamente, o sistema precisará carregá-los de arquivos, o que pode causar E/S adicional e degradação de desempenho.

  • Mesmo com o cache cheio, ainda é possível reduzir seu tamanho online ajustando os parâmetros. O Global Cache correspondente removerá alguns dados. Como isso pode afetar o desempenho, execute essa operação com cautela.

  • A memória especificada por polar_sgc_max_size é alocada para o Global RelCache e o Global CatCache. Uma parte dessa memória também deve ser reservada para fins de gerenciamento, como tabelas hash internas, para garantir o funcionamento correto do Global Cache. Portanto, o valor de polar_sgc_max_size deve ser maior que a soma de polar_global_relcache_size e polar_global_catcache_size.

Interfaces de monitoramento

Todas as interfaces de monitoramento do Global Cache estão disponíveis na extensão polar_global_cache. Crie a extensão executando o comando a seguir.

CREATE EXTENSION polar_global_cache;

Informações estatísticas do cache

Informações estatísticas globais do Global Cache

Visualize as informações de status do Global Cache na visualização polar_global_cache_stat. Atualmente, esta visualização inclui estatísticas apenas para o Global RelCache e o Global CatCache.

=> SELECT * FROM polar_global_cache_stat;
-[ RECORD 1 ]----+----------------
cache_name       | Global CatCache
elems            | 2805
nlookup          | 74233
nlookup_miss     | 43576
ninsert          | 9478
nmove            | 0
ndelete          | 0
ninvalidate      | 35843
nflush           | 1
nevict           | 0
nevict_active    | 0
nevict_fail      | 0
lru_active_len   | 402
lru_inactive_len | 2403
data_allocator   | 2
meta_allocator   | 1
component_id     | 1
-[ RECORD 2 ]----+----------------
cache_name       | Global RelCache
elems            | 95
nlookup          | 1203
nlookup_miss     | 1005
ninsert          | 265
nmove            | 0
ndelete          | 0
ninvalidate      | 4404
nflush           | 1
nevict           | 0
nevict_active    | 0
nevict_fail      | 0
lru_active_len   | 3
lru_inactive_len | 92
data_allocator   | 3
meta_allocator   | 1
component_id     | 2

Descrições das métricas:

Métrica

Descrição

nlookup

Número de buscas no cache.

nlookup_miss

Quantidade de falhas de busca. Utilize esta métrica juntamente com nlookup para avaliar a taxa de acerto do Global Cache. A taxa de acerto pode ser baixa logo após a inicialização do sistema, mas aumentará gradualmente à medida que o cache for pré-carregado. Defina uma capacidade adequada para garantir alta taxa de acerto no Global Cache e evitar degradação de desempenho.

ninsert

Total de novas inserções no cache.

nmove, ndelete

Número de vezes que objetos do cache foram movidos e excluídos durante o dimensionamento.

ninvalidate

Contagem de invalidações de cache.

nflush

Frequência com que todo o cache foi limpo devido a uma mensagem especial de invalidação ou a um comando como drop database;.

nevict

Soma total de objetos removidos do Global Cache.

Nota

Os objetos no Global Cache são removidos com base em uma política de Uso Menos Recente (LRU). Eles são divididos em uma lista ativa e uma lista inativa, sendo que os objetos da lista inativa são removidos primeiro. Durante a evicção, um objeto que deveria ser removido segundo a política LRU pode permanecer no cache porque está em uso no momento ou devido a conflitos de concorrência. Você pode ignorar esses casos.

Um valor diferente de zero nas métricas relacionadas a nevict indica capacidade atual insuficiente. Para evitar problemas de desempenho, aumente a capacidade ajustando o parâmetro polar_global_catcache_size ou polar_global_relcache_size.

nevict_active

Quantidade de objetos removidos da lista ativa do Global Cache.

nevict_fail

Número de evicções malsucedidas no Global Cache.

lru_active_len

Tamanho da lista ativa na lista LRU interna.

lru_inactive_len

Extensão da lista inativa na lista LRU interna.

Informações estatísticas globais do Local Cache

As métricas na visualização polar_cache_stat representam um subconjunto daquelas presentes na visualização polar_global_cache_stat. Para obter mais detalhes sobre as métricas, consulte as descrições de métricas da visualização polar_global_cache_stat.

Nota

Embora polar_cache_stat exiba informações sobre caches privados de cada processo, os resultados da consulta desta visualização agregam dados de todos os processos.

=> SELECT * FROM polar_cache_stat;
-[ RECORD 1 ]-+--------------
cache_name    | Proc CatCache
nlookup       | 779844
nlookup_miss  | 82390
ninsert       | 150876
ndelete       | 139690
ninvalidate   | 74231
nevict        | 126474
nevict_active | 1808
evict_fail    | 0
-[ RECORD 2 ]-+--------------
cache_name    | Proc RelCache
nlookup       | 295183
nlookup_miss  | 4632
ninsert       | 25968
ndelete       | 3277
ninvalidate   | 8856
nevict        | 0
nevict_active | 0
evict_fail    | 0

Informações estatísticas do CatCache

Informações estatísticas do Global CatCache

Você pode visualizar as informações de status do Global CatCache na visualização polar_global_catcache_stat.

Nota

Em comparação com polar_global_cache_stat, esta visualização inclui campos adicionais xxx_clist. Geralmente, você pode ignorar essas métricas. Existem dois tipos de objetos no CatCache: CatTuple e CatList. As métricas xxx_clist registram vários dados sobre objetos CatList.

=> SELECT * FROM polar_global_catcache_stat;
-[ RECORD 1 ]-------+----
elems               | 34
nlookup             | 853
nlookup_miss        | 852
ninsert             | 34
nmove               | 0
ndelete             | 0
ninvalidate         | 0
nflush              | 0
nevict              | 0
nevict_active       | 0
nevict_fail         | 0
nlookup_clist       | 41
nlookup_miss_clist  | 41
ninsert_clist       | 0
nmove_clist         | 0
ndelete_clist       | 0
ninvalidate_clist   | 0
nevict_clist        | 0
neivct_active_clist | 0
rehash_fail         | 0
meta_alloc_fail     | 0
data_alloc_fail     | 0
lru_active_len      | 0
lru_inactive_len    | 34
component_id        | 1

Informações estatísticas do Local CatCache

Você pode visualizar as informações de status do CatCache privado de um processo na visualização polar_catcache_stat. As métricas estatísticas constituem um subconjunto daquelas encontradas em polar_global_catcache_stat e possuem os mesmos significados.

=> SELECT * FROM polar_catcache_stat;
-[ RECORD 1 ]------+-----
nlookup            | 2060
nlookup_miss       | 898
ninsert            | 883
ndelete            | 753
ninvalidate        | 0
nevict             | 753
nevict_active      | 2
evict_fail         | 0
nlookup_clist      | 41
nlookup_miss_clist | 41
ninsert_clist      | 41
ndelete_clist      | 41

Informações estatísticas do RelCache

Informações estatísticas do Global RelCache

Você pode visualizar o status do Global RelCache na visualização polar_global_relcache_stat.

=> SELECT * FROM polar_global_relcache_stat;
-[ RECORD 1 ]----+-----
elems            | 61
nlookup          | 930
nlookup_miss     | 836
ninsert          | 221
nmove            | 0
ndelete          | 0
ninvalidate      | 4344
nflush           | 1
nevict           | 0
nevict_active    | 0
nevict_fail      | 0
meta_alloc_fail  | 0
data_alloc_fail  | 0
lru_active_len   | 3
lru_inactive_len | 58
component_id     | 2

Informações estatísticas do Local RelCache

Você pode visualizar o status do RelCache na sessão atual na visualização polar_relcache_stat.

=> SELECT * FROM polar_relcache_stat;
-[ RECORD 1 ]-+-------
nlookup       | 293458
nlookup_miss  | 4535
ninsert       | 20239
ndelete       | 3277
ninvalidate   | 8856
nevict        | 0
nevict_active | 0
evict_fail    | 0