PostgreSQL의 max_connections와 pgbouncer의 default_pool_size를 계산하는 방법은 무엇입니까?


17

규칙 또는 뭔가 내가위한 좋은 번호를 계산하는 데 사용할 수 있는가 max_connections, default_pool_size그리고 max_client_conn?

기본값은 홀수입니다. PostgreSQL의 기본값은 max_connections = 100이고 pgbouncer의 기본값은 default_pool_size = 20입니다. default_pool_size가 항상 max_connections보다 높아야합니까? 그렇지 않으면 요점이 뭐야? pgbouncer는 (PostgreSQL의 연결을 재사용하여) 오버 헤드를 낮추어 더 많은 연결을 처리 할 수 ​​있었다고 생각했습니다. 혼란 스러워요.

PostgreSQL의 wiki 에서와 비슷한 조언을 찾고 있습니다. "이 매개 변수는 메모리의 ~ 50 % 여야합니다."

이런 종류의 매개 변수를 계산할 수있는 MySQL 스프레드 시트가 있다는 것을 기억합니다. PostgreSQL / pgbouncer와 같은 것이 있으면 좋을 것입니다.

답변:


12

먼저 용량 계획에 대한 정식 질문을 읽으십시오 .
요구하는 구체적인 조언은 용량 계획 조언이며, 특정 환경에 맞게 스스로 해결해야합니다.

둘째, 당신은 이것을 잘못보고 있습니다.
설정 한 연결 수를 결정하지 않는 메모리 양 (또는 기타 리소스), 필요한 연결 수 는 서버를 얼마나 강력하게 구매해야 하는지를 나타냅니다.
연결 별 리소스 요구 사항은 설명서 에 상당히 자세하게 설명되어 있으며 연결 한 Wiki에서 설명합니다. 환경에 필요한 것이 무엇인지 파악하고 (또는 교육적인 추측) 실행하려는 하드웨어가 던질 대상을 처리 할 수 ​​있는지 확인하십시오.


특히 연결 제한 및 풀 크기는 단일 서버 또는 풀 / 바운서를 통해 응용 프로그램의 요구 사항을 충족 할 수있는 "충분한"연결이 있어야합니다.

"충분히"는 상대 숫자입니다. 하나의 연결을 만들고 계속 재사용하는 응용 프로그램은 하나의 연결 만 필요합니다. 로그인하는 각 최종 사용자에 대한 연결을 설정하는 응용 프로그램에는 사용자 수만큼의 DB 연결이 필요합니다.

Postgres의 기본값pgbouncer기본값은 다음 과 같습니다 .

  • 100 개의 데이터베이스 연결은 Postgres를 환경에 던지는 일반적인 사람에게는 많은 것입니다.
    개발자는 아마 10 명 이상이 필요하지 않을 것입니다. 다른 사람은 그 수를 늘리기에 충분할 것입니다.

  • pgbouncerDB 풀당 20 개의 연결은 하나의 서버를 가리키는 4 개의 풀을 얻을 수 있으며 기본 Postgres 연결 제한을 압도하지 않습니다. 하나의 백엔드 데이터베이스
    pgbouncer가리키는 여러 개의 풀링 된 리소스를 가질 수 있으며 항상 백엔드 서버에서 사용 가능한 일부 연결을 원합니다.

기본값 이 환경에 적합하지 않은 경우 기본값 을 변경해야합니다.

풀링 된 연결이 "항상 사용 가능한 모든 데이터베이스 연결을 연결"한다는 의미는 아닙니다.
의 시점 pgbouncer은 언급 한 바와 같이이하는 것입니다 다시 연결합니다. 여기서 효율성을 높이려면 사용 가능한 모든 연결을 묶을 필요가 없으며 연결을 끊고 다시 연결하고 SSL을 다시 협상하거나 데이터베이스에 다시 인증하고 매번 연결 설정 쿼리를 다시 실행하면 안됩니다.


8
제대로 구성하기 전에 더 많은 하드웨어를 구매할 시점이 보이지 않습니다. "다른 사람은 숫자를 늘릴만큼 충분히 알 것입니다 . " 글쎄, 어디서 알 수 있습니까? 연결에 대해 많은 자료를 찾지 못했습니다. 그냥 시행 착오입니까? MySQL에 대해 언급 한 스프레드 시트는 매력처럼 작동했습니다. 표시된 것보다 많은 연결을 사용하면 서버의 메모리가 부족합니다. 지금은 4GB를 가지고 있으며 기본값을 늘려야했습니다. 또한 20x4 = 80, 다른 20은 무엇입니까?
ChocoDeveloper

1
@ChocoDeveloper 답변을 완전히 다시 읽고 (내가 이미 언급 한 사항을 묻고 있음) 연결된 문서와 함께 몇 분을 보내십시오. 당신은 여전히 ​​이것을 거꾸로보고 있습니다 (내 대답의 첫 번째 단락 참조). Postgres는 MySQL이 아니라는 점을 명심하십시오. MySQL 튜닝 경험에서 알고 있다고 생각하는 모든 것을 잊어야합니다. Postgres는 Oracle과 비슷합니다. 설명서를 공부하고 지시에 따라 진행하십시오.
voretaq7

1

주목 의 문서의 정의를default_pool_size

사용자 / 데이터베이스 쌍당 허용되는 서버 연결 수

따라서 기본 구성이 총 100 개의 연결 중 풀 크기가 20 인 경우, 이는 전체 한계에 도달하기 전에 5 개의 개별 사용자 / 데이터베이스 쌍이 풀 크기를 각각 최대로 사용해야 함을 의미합니다. 반대로, 예를 들어 pgbouncer를 사용하여 단일 사용자를 통해 단일 데이터베이스로 라우팅하는 경우 유효 연결 제한은 100이 아니라 20이므로 해당 유스 케이스의 풀 크기를 적절하게 설정해야합니다. YMMV.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.