O título conta a história, mas como posso rastrear a causa de um pico de memória no Postgres 11.10? Como você pode ver na captura de tela abaixo, houve um pico de memória de até 32 GB, o que fez com que o OOM iniciasse e matasse várias conexões. De acordo com /var/log/postgresql/postgresql-11-main.log
o sistema de banco de dados entrou em modo de recuperação ao mesmo tempo e perdemos um pouco de dados também.
Suspeito que o número de conexões juntamente com instruções de inserção muito grandes possa ter algo a ver com isso, mas precisa de uma maneira de provar (ou refutar) a hipótese.
Primeiro, você deve configurar o Linux para que ele não comprometa demais a memória, porque não há nada que você possa obter de um backend que foi morto pelo OOM killer.
Defina
vm.overcommit_memory = 2
e definavm.overcommit_ratio
para o valor calculado comoEntão você deve receber um erro OOM do PostgreSQL em vez do PostgreSQL entrar em recuperação de falha.
Esse erro OOM causará um dump de contexto de memória no arquivo de log do PostgreSQL, para que você possa ver qual contexto de memória usa toda essa memória. Além disso, você obtém a consulta que causou o erro, para que possa experimentar isso.