Muito. Use menos. MUITO menos.

Sei que isso não é uma ciência exata, mas o que vocês indicariam como
saudável?

Não há uma regra, mas o pessoal costuma começar a regulagem com um total de até 2 vezes o número de núcleos para uma aplicação OLTP.

Existe um trabalho pesado feito pelo desenvolvedor Andreas Freund que achou um overhead no gerenciamento de locks. Ele já fez um patch mas isso só deve ser colocado dentro do código na versão 9.6. Com esse patch, o número de conexões possíveis deve aumentar bastante sem grande piora no desempenho.

Pois hoje rodamos o sistema com 4 Apps, geralmente cada um deles roda
com 15 conexões.

Deveria reduzir esse max do pool para um valor mais baixo, e em casos em
que há picos de conexão por qualquer fator que seja, esperar que o pool
se recupere? Pq já pensei nessa possibilidade também, limitar o numero
de conexões ao banco e deixar o pool fazer o seu trabalho.

Limite no pool.
Se sua aplicação começar a reclamar de falta de conexões, o problema é outro. Aí entra tuning, otimizações de consultas e código, etc.

    Qual a versão do PostgreSQL, sistema operacional e quantos núcleos
    de processamento tens no seu servidor?


9.2.13, Ubuntu Server 14.04, 32 núcleos hoje apenas por um período, mas
o normal é uma EC2 com 16 núcleos.

Limite seu total a 64 conexões (soma de todos os pools dos JBoss)
Depois, monitore o servidor e veja se ainda tem tempo de CPU sobrando. Aí você pode aumentar gradativamente. Se estiver engargalado, reduza gradativamente.

Faço isso em todos os ambientes que trabalho.
Sim, os desenvolvedores Java ficam com a pulga atrás da orelha mas depois agradecem por terem aprendido mais alguma coisa na vida.


        Li também problemas relacionados a overhead no processo de
        checkpoint,
        os parâmetros hoje estão da seguinte forma.

        checkpoint_segments = 256

OK. Mas você monitora o log pra ver se usa isso tudo mesmo?

        checkpoint_timeout = 30min

Muito.
Normalemente os 5 minutos por default funcionam melhor.

        checkpoint_warning = 30min

Isso aqui é só pra log. Na verdade, melhor que esse valor seja menor que o anterior pra você saber se os checkpoints estão ocorrendo com frequência exagerada.

        checkpoint_completion_target = 0.9

Em SSD ok.

        bgwriter_lru_maxpages = 500
        bgwriter_lru_multiplier = 3
        bgwriter_delay = 50ms

Diz a lenda (e algumas lendas famosas) que isso não muda nada mas na minha experiência vale o tuning. Mas tem que ter os discos monitorados e separado pra enxergar o ganho.

Os dados estão em SSD com RAID 10, 10 volumes de 200GB, totalizando
6000IOPS. A PGDATA está em um SSD de 50GB.

Você me parece ter bons discos. Mas monitore sempre o await e service time.
Seu banco de dados é relativamente pequeno.

[]s
Flavio Gurgel
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a