Temos o banco de dados postgresql 11.7 no contêiner docker.
Tivemos um problema "pq: could not resize shared memory segment "/PostgreSQL.XXX" to XXX bytes: No space left on device"
, descrito aqui .
A solução ajudou, não temos mais problemas. Mas qual tamanho devemos definir para shm_size para contêiner docker com Postgres?
É alguma recomendação? Como podemos calcular o 'tamanho ideal' para shm_size?
Há duas coisas que usam memória compartilhada:
A memória compartilhada que é alocada na inicialização do servidor. Isso consiste em várias partes, mas a maior parte é
shared_buffers
o cache de dados.Então você tem que ter mais memória compartilhada do que isso.
Segmentos de memória compartilhada alocados por consulta paralela para comunicação entre trabalhadores paralelos.
Seu tamanho depende dos dados transferidos, e vários deles podem ser alocados, então esse é um recurso mais difícil de controlar.
Em um sistema com restrição de memória, recomendo que você desabilite a consulta paralela. Ele torna as consultas mais rápidas, mas usa mais recursos por consulta, portanto, a taxa de transferência geral não melhora. É bom se você quiser lançar muitos recursos em uma única consulta.
Para desabilitar a consulta paralela, defina
max_parallel_workers
como 0.