Como aumentar as conexões máximas no postgres?
Estou usando o Postgres DB para meu produto. Ao fazer a inserção de lote usando slick 3, estou recebendo uma mensagem de erro:
org.postgresql.util.PSQLException: FATAL: desculpe, já há muitos clientes.
Minha operação de inserção de lote terá mais do que milhares de registros. A conexão máxima para meu postgres é 100.
Como aumentar as conexões máximas?
stackoverflow.com/questions/9798705/…
Use um pool de conexão como pgBouncer ou pgPool
1. Primeiro verifique se o seu middleware não está mantendo muitas conexões abertas ou se as está vazando. 2. (talvez) em seguida, use um pooler de conexão. 3. (quase) nunca aumente o número de conexões permitidas neste tipo de problema, na maioria dos casos isso vai piorar as coisas. (exceto se você tiver certeza absoluta)
Aumentar max_connectionsé má ideia. Você precisa aumentar shared_bufferse kernel.shmmaxtambém.
max_connectionsdetermina o número máximo de conexões simultâneas com o servidor de banco de dados. O padrão é normalmente 100 conexões.
Antes de aumentar sua contagem de conexões, você pode precisar aumentar sua implantação. Mas antes disso, você deve considerar se realmente precisa de um limite de conexão maior.
Cada conexão PostgreSQL consome RAM para gerenciar a conexão ou o cliente que a usa. Quanto mais conexões você tiver, mais RAM estará usando, que poderia ser usada para executar o banco de dados.
Um aplicativo bem escrito normalmente não precisa de um grande número de conexões. Se você tem um aplicativo que precisa de um grande número de conexões, considere usar uma ferramenta como o pg_bouncer, que pode agrupar conexões para você. Como cada conexão consome RAM, você deve procurar minimizar seu uso.
Como aumentar o máximo de conexões
1. Aumente max_connectioneshared_buffers
no /var/lib/pgsql/{version_number}/data/postgresql.conf
O shared_buffersparâmetro de configuração determina quanta memória é dedicada ao PostgreSQL a ser usada para armazenamento de dados em cache .
Se você tem um sistema com 1 GB ou mais de RAM, um valor inicial razoável para shared_buffers é 1/4 da memória em seu sistema.
é improvável que você descubra usando mais de 40% de RAM para funcionar melhor do que uma quantidade menor (como 25%)
Esteja ciente de que se o seu sistema ou construção PostgreSQL for de 32 bits, pode não ser prático definir shared_buffers acima de 2 ~ 2,5 GB.
Note que no Windows, valores grandes para shared_buffers não são tão eficazes, e você pode encontrar melhores resultados mantendo-o relativamente baixo e usando mais o cache do sistema operacional. No Windows, o intervalo útil é de 64 MB a 512 MB .
2. Altere kernel.shmmax
Você precisaria aumentar o tamanho máximo do segmento do kernel para ser ligeiramente maior que o shared_buffers.
No arquivo, /etc/sysctl.confdefina o parâmetro conforme mostrado abaixo. Ele terá efeito quando postgresqlreinicializar (a linha a seguir torna o kernel máximo 96Mb)
Conexões máximas de Postgres e buffers compartilhados
Ajustando seu servidor PostgreSQL
Ótima resposta. algumas perguntas .. como 100663296 é igual a 96 MB? e por que mudamos shmmax o que isso faz?
100663296 Bytes = 96 MB (em binário). shmmax é o tamanho máximo de um segmento de memória compartilhada . Agora, como aumentamos o tamanho dos buffers compartilhados, precisamos alterar shmmax para acomodar o aumento de memória para armazenamento em cache.
— skrebbel de
Você pode usar PGTune para ajudá-lo a determinar essas configurações para o seu sistema
Verifique sua configuração atual de kernel.shmmax ( cat /proc/sys/kernel/shmmax) antes de alterá-la. Em sistemas modernos, ele já está ridiculamente alto e não deve ser alterado. O meu é definido como 18446744073692774399padrão no Ubuntu 18.04.
Adicionando à ótima resposta de Winnie,
Se alguém não conseguir encontrar a localização do arquivo postgresql.conf em sua configuração, você pode sempre perguntar ao próprio postgres.
Para mim, mudar o max_connections sozinho fez o truque.
Obrigado. No Ubuntu 18.04, é/etc/postgresql/11/main/postgresql.conf
altere a variável max_connections no arquivo postgresql.conf localizado em / var / lib / pgsql / data ou / usr / local / pgsql / data /
Por que pg_hba.conf? Não tem nenhum parâmetro sobre o número de conexões, apenas como conectar. postgresql.conf por outro lado .... Mas centenas de conexões é uma má ideia, não faça isso, use um pool de conexão ou tenha problemas de desempenho. PostgreSQL 8.3 é EOL por muitos anos, por favor, use uma versão atualizada.