
Eu tenho um servidor PostgreSQL 9.4 que parece limitar as conexões a menos do que defini em max_connections.
Eu tenho max_connections definido como 300.
SHOW max_connections;
max_connections
-----------------
300
No entanto, descobri que começo a obter o tempo limite de novas conexões assim que minhas conexões ativas atingem 100, conforme medido porSELECT count(*) from pg_stat_activity;
Enquanto esse número estiver abaixo de 100, novas conexões funcionarão. Quando atingir 100, novas conexões falharão: PG::ConnectionBad: could not connect to server: Connection timed out
(biblioteca Ruby pg)
Parece haver uma exceção para conexões de superusuário (ou seja, eu me conectando via PgAdmin), pois posso exceder o limite de 100 dessa forma, embora os aplicativos que não usam superusuários continuem a atingir o tempo limite.
Não consigo descobrir exatamente qual pode ser a causa raiz.
Algumas configurações:
max_connections = 300
superuser_reserved_connections = 2
shared_buffers = 1024MB
effective_cache_size = 2048MB
work_mem = 8MB
maintenance_work_mem = 256MB
Tentei mexer um pouco nesses valores, sem nenhum efeito útil.
Outros detalhes:
- Ubuntu 14.04 64 bits
- VPS Linode de 4GB
- PostgreSQL 9.4.1
- Não tive esse problema essencialmente com a mesma configuração no PostgreSQL 9.2.
- Os bancos de dados foram migrados do Postgres 9.2 via pg_dumpall
- O uso de memória não parece ser um problema,
free
mostra 2,1 GB livres, 3,5 GB incluindo buffers/cache. - As conexões são para muitas funções diferentes para muitos bancos de dados diferentes, nenhum banco de dados individual tem mais de 5 ou 6 conexões ativas e cada banco de dados está sendo acessado por sua própria função separada. Não parece estar entrando em conflito com nenhum limite de conexão em bancos de dados ou funções individuais.
Responder1
Você também aumentou o tamanho máximo do segmento do kernel?
Tentar:
sysctl -w kernel.shmmax=1258291200
Responder2
É possível que você tenha limitado a conexão máxima do usuário?Privilégios de função
Você pode mudar isso com
ALTER ROLE nome da função CONNECTION LIMIT 300;