Heroku“psql : FATAL : 나머지 연결 슬롯은 비 복제 수퍼 유저 연결 용으로 예약되어 있습니다.”


120

Postgresql 백엔드로 Heroku에서 앱을 개발 중입니다. 주기적으로 CLI에서 그리고 서버에 페이지를로드 할 때 데이터베이스에 액세스하려고 할 때이 오류 메시지가 표시됩니다.

psql: FATAL: remaining connection slots are reserved for non-replication superuser connections

전에 본 사람이 있습니까? 아니면 올바른 방향으로 나를 알려주십시오.


1
같은 문제가 있습니다. 나는 Heroku 지원이 일부 서버에서 "몇 가지 문제를 감지"했다고 어딘가에서 읽었으며 문제의 사용자에게 새로운 기본 데이터베이스를 프로비저닝하고 pgbackups를 사용하여 마이그레이션하도록 권장했습니다. 내 문제는 이제 응용 프로그램이 아직 백업을 작성하지 않은 너무 새로운 것입니다, 나는 같은 오류는 물론 하나 만들려고 얻을 : D
앙드레 라즐로

기록을 heroku pgbackups위해이 오류에도 불구하고 명령을 사용하여 백업을 만들 수있었습니다 .
markshiz

이 문제를 재현하기 위해 많은 양의 터미널을 만들 수 있습니다. .batWindows의 스크립트 : for /l %%x in (1, 1, 100) do ( start psql )여기서 100 은 원하는 백엔드 수입니다.
koxt 2014

나는 같은 문제가 있었다. 내가 사용하여 새 데이터베이스로 데이터를 전송 할 수 없습니다 pg:backups copy, pg:backups capture에서 연결하여, pgAdmin내 자신의 컴퓨터 또는 내가 상상할 수있는 다른 방법에. pg:killall도와 주지도 않았다. 한 시간 후 다시 시도했고 연결이 50-50이되었으므로 몇 번 시도한 후 성공 pg:backups copy했고 내 앱이 다시 방송되었습니다. 오늘은 ... 재밌는 날이 아니 었어요. 이걸 봤다면 물 한 컵 마셔
Aur Saraf

1
나는 지금 이것을 다시 가지고있다. 내 이전 경험을 문서화 한 것이 얼마나 운이 좋은가 ... 편집 : 이번에는 다시 시작하는 것으로 충분했습니다.
Aur Saraf 2015

답변:


56

max_connections구성 설정 을 늘리 거나 연결 풀링사용 하여 더 작은 연결 풀을 통해 많은 수의 사용자 요청을 라우팅해야합니다.

https://wiki.postgresql.org/wiki/Number_Of_Database_Connections


14
또한 일반적인 문제는 클라이언트 측 앱이 충돌하고 연결을 열어 둔 다음 다시 시작할 때 새 연결을 여는 것과 같은 것입니다. 이런 일이 많이 발생하면 연결이 부족해질 것입니다. 또는 앱이 부적절하게 구성되어 너무 많은 연결이 열립니다.
Scott Marlowe

5
Heroku에서 구성 설정을 변경할 수 없다고 생각합니다. 열려있는 모든 연결을 닫는 방법이 있습니까?
nathancahill

1
바라건대, 서버가 상당히 공격적인 기반으로 킵 얼라이브 패킷에 대해 구성되기를 바랍니다. 이로 인해 연결이 갑자기 끊어진 경우 적절한 시간 내에 세션이 종료됩니다. 구성되지 않은 경우 데이터베이스 수퍼 유저로 로그인 할 수 있다면 pid세션 값을 식별 하고 pg_terminate_backend()기능을 사용하여 세션 을 종료 할 수 있습니다. 문제를 방지하려면 클라이언트 쪽을 갑자기 종료하는 대신 연결을 올바르게 닫아야합니다.
kgrittn

@nathancahill 데이터베이스에 대한 모든 연결을 종료합니다.heroku pg:killall
Roko

9

이 예외는 연결을 닫는 것을 잊었을 때 발생했습니다.


7

Heroku“psql : FATAL : 나머지 연결 슬롯은 비 복제 수퍼 유저 연결 용으로 예약 됨”을 참조하십시오 .

Heroku는 때때로 데이터베이스 부하 분산에 문제가 있습니다.

André Laszlo, markshiz그리고 저 모두 질문에 대한 의견에서 그것을 다루고 있다고보고했습니다.

지원 요청을 저장하기 위해 유사한 문제에 대해 Heroku 지원팀에서받은 응답은 다음과 같습니다.

여보세요,

취미 계층 데이터베이스의 제한 사항 중 하나는 예고되지 않은 유지 관리입니다. 많은 취미 데이터베이스가 단일 공유 서버에서 실행되며 하드웨어 유지 관리를 위해 서버를 다시 시작하거나로드 균형 조정을 위해 데이터베이스를 다른 서버로 마이그레이션해야하는 경우가 있습니다. 이 경우 로그에 오류가 표시되거나 연결 문제가 발생합니다. 서버가 다시 시작되는 경우 데이터베이스가 다시 온라인 상태가되는 데 15 분 이상 걸릴 수 있습니다.

연결 풀을 유지하는 대부분의 앱 (예 : Rails의 ActiveRecord)은 데이터베이스에 대한 새 연결을 열 수 있습니다. 그러나 경우에 따라 앱을 다시 연결할 수 없습니다. 이 경우 앱을 다시 시작하여 온라인 상태로 되돌릴 수 있습니다.

이것이 중요한 프로덕션 애플리케이션에 취미 데이터베이스를 실행하지 않는 것이 좋습니다. Standard 및 Premium 데이터베이스에는 다운 타임 이벤트에 대한 알림이 포함되어 있으며 일반적으로 훨씬 더 성능이 좋고 안정적입니다. pg : copy를 사용하여 표준 또는 프리미엄 플랜으로 마이그레이션 할 수 있습니다.

이것이 계속되면 heroku addons : add를 사용하여 새 데이터베이스 (다른 서버에서)를 프로비저닝 한 다음 pg : copy를 사용하여 데이터를 이동할 수 있습니다. 취미 등급 규칙은 $ 9 기본 플랜과 무료 데이터베이스에 적용됩니다.

감사합니다, Bradley


1
$ 50 / 월 데이터베이스 요금제를 사용하는 경우 미리 준비된 답변이 무엇인지 궁금합니다.
mpoisot

1
취미 계층 만 공유 데이터베이스 서버를 사용합니다. $ 50 / 월 계획을 사용하면 자체 서버가 있으므로이 문제가 발생하는 경우 자체 앱이 생성합니다. $ 50 / 월 플랜에는 더 많은 관리 옵션이 있으므로 진단 및 수정이 더 쉽습니다.
Jessamyn Smith

표준 옵션으로 할 수있는 관리 옵션이 무엇인지 설명해 주시겠습니까? 또한 200 개의 연결로만이 메시지를받습니다.
Pencilcheck

6

실제로 다음을 사용하여 장고 끝에서 연결 풀링을 구현하려고 시도했습니다.

https://github.com/gmcguire/django-db-pool

하지만 사용 가능한 연결 수를 표준 개발 DB 할당량 인 20 개 이하로 줄 였음에도 불구하고이 오류가 계속 발생했습니다.

여기에 postgresql 데이터베이스를 Amazon RDS의 무료 / 저렴한 계층으로 이동하는 방법에 대한 기사가 있습니다. 이렇게하면 max_connections더 높게 설정할 수 있습니다 . 또한 PGBouncer를 사용하여 데이터베이스 수준에서 연결을 풀 수 있습니다.

https://www.lewagon.com/blog/how-to-migrate-heroku-postgres-database-to-amazon-rds

최신 정보:

Heroku는 내 공개 티켓에 응답하고 내 데이터베이스가 네트워크에서 부적절하게 부하 분산되었다고 말했습니다. 그들은 시스템을 개선하면 향후 유사한 문제를 예방할 수 있다고 말했습니다. 그럼에도 불구하고 지원은 수동으로 데이터베이스를 재배치했으며 성능이 눈에 띄게 향상되었습니다.


데이터베이스를 이동하는 것이이를 완전히 제어 할 수있는 최상의 솔루션이라고 생각합니다. 그 기사에 감사드립니다.
nathancahill 2013 년

-3

다음 명령으로 postgres 데이터베이스를 다시 시작하십시오.

postgres -D /usr/local/var/postgres

Postgres DB는 Heroku에서 호스팅하는 서비스이므로 작동하지 않습니다.
flurdy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.