2012-08-29 3 views

답변

1

PgBouncer 같은 전용 연결 풀러를 사용하는 것이 좋습니다.

성능 pg_pconnect에 비교할 수 있지만, PHP 코드의 오류 후 PgBouncer will allow to perform a cleanup한다. pg_pconnectwill not automatically clean open transactions, locks, prepared statements

+0

pg_pconnect와 pgbouncer를 함께 사용하는 것이 합리적입니까? – varan

+1

아니요, pg_pconnect 및 PgBouncer를 사용하는 것은 의미가 없습니다. – Tometzky

0

글쎄, pg_pconnect는 PHP 백엔드 당 하나의 연결을 의미합니다, 그래서 당신이 얼마나 많은 백엔드에 따라 달라집니다. 기존의 Apache mod-php 설정을 사용하면 시동기가 될 수는 없지만 그럴 수는 있습니다.

데이터베이스 서버는 유휴 연결의 수백을 처리하지만 모든 쿼리가 동시에 실행되고있는 경우 거의 확실히 중단 갈기 수 있습니다. I/O가 당신을 먼저 제한하지 않는다고 가정 할 때, 코어 당 두 개 이상의 연결만으로 엄지 손가락을 보았습니다.

일반적인 접근 방식은 pgbouncer 같은 연결 풀러를 실행하고 PHP는 당 요청을 연결하는 것입니다. 동시성을 유지하면서 연결 오버 헤드를 줄입니다.

1

PostgreSQL 서버에 대한 연결 설정은 MySQL 서버보다 훨씬 비쌉니다. 이것은 독립적 인 연결간에 리소스 할당 및 권한 분리를 처리하는 방법에있어 이러한 데이터베이스의 다양한 디자인 선택 때문입니다.

따라서, 웹 사이트, 그것은 완전히 가능한 PostgreSQL을에 연결를 재사용 할 수 있습니다.

일반적으로 권장되는 방법은 pg_pconnect이 아니라 pgBouncer 또는 pgPoolII과 같은 외부 연결 풀러를 사용하는 것이 좋습니다.이 작업은이 작업에 더 적합합니다. PHP-FPM을 사용할 때 fpm 프로세스 관리자 옵션을 통해 열려있는 연결 수를 어떻게 든 제어 할 수있는 미들웨어가 이미 있으므로 충분할 수 있습니다. 0이 아닌 값으로 pm.max_requests을 설정하면 적절한 빈도로 연결이 정리되고 사용량이 적은 시간에 사용되지 않은 연결이 유지되지 않습니다.

+0

감사합니다. 왜 pg_pconnect를 사용하지 않는 것이 좋을까요? – varan

+0

@ RichardHuxton의 답변을 참조하십시오. 기본적으로 각 아파치 프로세스를 서로 다른 열린 PG 연결로 연결해야합니다. 그것은 종종 너무 많은 연결을 의미합니다. 그러나 fastcgi 모델은 이러한 문제를 완화합니다. –

+0

당신은 pg_pconnect를 사용할 수 있습니다. (pgbouncer가 권장하는) 풀러를 사용한다면 연결 비용/시간을 훨씬 더 낮게 유지할 수 있습니다. pg_pconnect를 pg 서버에 직접 보내지 마십시오. –

관련 문제