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.
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:
|
polar_enable_global_relcache | PGC_USERSET | Ativa ou desativa o Global RelCache. Valores válidos:
|
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. |
É 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 depolar_sgc_max_sizedeve ser maior que a soma depolar_global_relcache_sizeepolar_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 |
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 |
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 |
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.
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.
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