PostgreSQL limitando as conexões para menos de max_connections?

4

Eu tenho um servidor PostgreSQL 9.4 que parece limitar as conexões a menos do que eu 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 novas conexões com tempo limite, assim que minhas conexões ativas atingem 100, conforme medido por SELECT count(*) from pg_stat_activity;

Enquanto esse número estiver abaixo de 100, novas conexões funcionarão. Uma vez que atinge 100, novas conexões falham: PG::ConnectionBad: could not connect to server: Connection timed out (biblioteca de Ruby pg)

Parece haver uma exceção para conexões de superusuário (ou seja, me conectando via PgAdmin), já que posso exceder o limite de 100 dessa maneira, embora os aplicativos que não usam superusuários continuem expirando.

Eu não sei exatamente qual é 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

Eu tentei mexer um pouco nesses valores, sem nenhum efeito útil.

Outros detalhes:

  • Ubuntu 14.04 64 bits
  • Linode VPS de 4 GB
  • PostgreSQL 9.4.1
  • Não teve esse problema com essencialmente a mesma configuração no PostgreSQL 9.2.
  • Bancos de dados foram migrados do Postgres 9.2 via pg_dumpall
  • O uso da 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 em conflito com quaisquer limites de conexão em bancos de dados ou funções individuais.
por Legion 30.04.2015 / 19:44

2 respostas

0

Você também aumentou o tamanho máximo do segmento do kernel?

Tente:

sysctl -w kernel.shmmax=1258291200
    
por 20.05.2015 / 18:37
0

É possível que você tenha limitado a conexão máxima de usuários? Privilégios de função

Você pode mudar isso com

ALTER ROLE rolename CONNECTION LIMIT 300;

    
por 06.10.2015 / 23:33