Estou desenvolvendo um aplicativo no Heroku com um back-end Postgresql. Periodicamente, recebo esta mensagem de erro ao tentar acessar o banco de dados, tanto da CLI quanto ao carregar uma página no servidor:
psql: FATAL: remaining connection slots are reserved for non-replication superuser connections
Alguém viu isso antes ou por favor me ajude a apontar na direção certa?
postgresql
heroku
Nathancahill
fonte
fonte
heroku pgbackups
comando para criar um backup, apesar desse erro..bat
script no Windows para isso:for /l %%x in (1, 1, 100) do ( start psql )
onde 100 é o número desejado de back-ends.pg:backups copy
,pg:backups capture
, conectando-se a ele a partirpgAdmin
do meu próprio computador, ou qualquer outra maneira que eu poderia imaginar. Mesmopg:killall
não ajudou. Uma hora depois, tentei novamente e as conexões estavam em 50-50, então, depois de algumas tentativas, obtive um sucessopg:backups copy
e meu aplicativo voltou ao ar. Este não foi ... um dia divertido. Se você pesquisou isso, beba um copo d'água.Respostas:
Você precisa aumentar a
max_connections
definição de configuração ou (provavelmente melhor) usar o pool de conexão para rotear um grande número de solicitações do usuário por meio de um pool de conexão menor.https://wiki.postgresql.org/wiki/Number_Of_Database_Connections
fonte
pid
valores para as sessões e usar apg_terminate_backend()
função para eliminá-los. Para evitar o problema, certifique-se de fechar as conexões corretamente, em vez de encerrar abruptamente o lado do cliente.heroku pg:killall
Essa exceção aconteceu quando eu esqueci de fechar as conexões
fonte
Consulte Heroku “psql: FATAL: os slots de conexão restantes são reservados para conexões de superusuário sem replicação” :
O Heroku às vezes tem problemas com o balanceamento de carga do banco de dados.
André Laszlo
,markshiz
e todos nós relatamos lidar com isso em comentários sobre a questão.Para evitar a chamada de suporte, aqui está a resposta que recebi do Suporte do Heroku para um problema semelhante:
fonte
Na verdade, tentei implementar o pool de conexão na extremidade do Django usando:
https://github.com/gmcguire/django-db-pool
mas ainda recebi esse erro, apesar de diminuir o número de conexões disponíveis abaixo da cota de banco de dados de desenvolvimento padrão de 20 conexões abertas.
Há um artigo aqui sobre como mover seu banco de dados postgresql para o nível gratuito / barato do Amazon RDS. Isso permitiria que você definisse
max_connections
mais alto. Isso também permitirá que você agrupe conexões no nível do banco de dados usando o PGBouncer.https://www.lewagon.com/blog/how-to-migrate-heroku-postgres-database-to-amazon-rds
ATUALIZAR:
Heroku respondeu ao meu tíquete aberto e afirmou que meu banco de dados estava com balanceamento de carga incorreto em sua rede. Eles disseram que as melhorias em seu sistema devem evitar problemas semelhantes no futuro. No entanto, o suporte realocou manualmente meu banco de dados e o desempenho melhorou visivelmente.
fonte
Reinicie seu banco de dados postgres seguindo o comando:
fonte