Estou fazendo testes em uma réplica, tentando diagnosticar por que os servidores demoram vários minutos para desligar quando o modo rápido é usado. Parece estar correlacionado com o alto uso de shmem, alguém pode recomendar uma boa consulta/comando para executar o que faria com que o postgresql alocasse/usasse muitos buffers compartilhados (shmem)?
Sou um engenheiro Linux, mas um pouco novo no postgres, e conheço apenas o básico do ponto de vista do DBA, mas tenho conhecimento sobre sistemas e Linux, bem como conceitos de memória/SO. Já tentei rodar \dt+ e procurar tabelas razoavelmente grandes (1G), desligando o pager e fazendo SELECT * na tabela em psql, mas não pareceu causar muito aumento de uso na memória compartilhada. Estou procurando aumentar a pegada em ~ <= 200G, idealmente.
De preferência algo simples que não grave no disco. Não quero modificar muito o estado atual, apenas causar alto uso de shmem (por exemplo: talvez uma seleção grande ou algo efêmero).
Isto está em um sistema Linux 3.x kernel sem enormespages (THP está habilitado no momento) e mmap está sendo usado para shmem, principalmente. postgres 13.6. Estou tentando obter ~ 500G de uso de memória compartilhada
No desligamento, o postgresql cria um ponto de verificação. Ou restartpoint se o banco de dados estiver no modo de espera ativa. Isso significa gravar (com fsync) todos os dados alterados de buffers compartilhados. Quanto mais alterações ocorreram no primário, mais o banco de dados precisa gravar.
O procedimento usual para um banco de dados de produção para uma reinicialização rápida é:
checkpoint
o comando no primário, aguarde a execuçãocheckpoint
comando na réplica que queremos desligar ou reiniciarpg_prewarm
de alguma grande relação.