2011-02-16 4 views
2

자바 세계에서는 앱 서버가 DB 연결과 같이 "값 비싼"리소스를 풀링하는 것이 꽤 표준입니다. 반면에 동적 언어에서는 대부분의 스택이 풀링 된 리소스와 특히 DB 연결과 관련이 거의 없습니다.DB 연결 풀링이 모두 중요합니까?

예. 인기있는 PHP + MySQL 콤보에 대해서는 가난한 사람이 풀링 된 연결로 간주 될 수있는 지속적인 연결에 거의 사용되지 않는 것으로 나타났습니다.

DB 연결 풀링 개념이 널리 구현되지 않은 경우 실제 배포에서 성능/확장 성 이득이 그다지 중요하지 않을 수 있다는 의미입니까?

답변

3

연결 풀링의 주된 이유는 첫 번째 인스턴스에서 연결을 설정하는 오버 헤드입니다. 나는 이것이 과거에 0.5 초가 걸리는 것을 보았다.

트랜잭션이 많은 환경에서는 연결을 열어 둘 수 있고 여러 연결을 한꺼번에 보냅니다. 따라서 낮은 트랜잭션 데이터베이스에서 이득을 볼 수는 없지만이 유용한 패턴을 무시하면 응용 프로그램의 크기가 조정되지 않습니다.

개방 된 연결 수를 훨씬 명확하게 관리하는 데 도움이됩니다. DB 연결 풀링의 개념이 널리 가 구현되지 않은 경우

0

, 이것은 성능/확장 성 향상이 실제 배포에서 모든 중요하지 않을 수도 있음을 의미합니까?

PHP에 대한 기본 제공 연결 풀이 없다는 것을 의미합니다. 그렇다고해서 PGPool을 사용할 수있는 Postgres와 같이 사용할 수 없다는 것을 의미하지는 않습니다.

0

일부 데이터베이스 공급 업체는 라이센스에 따라 특정 데이터베이스에 대한 연결 수를 제한하기 때문에 연결 폴링이 자주 사용됩니다. 오픈 소스 데이터베이스는 무료이기 때문에 그러한 제한이 없습니다. 따라서 MySQL에서는별로 문제가되지 않습니다.

연결 폴링을 사용하는 또 다른 이유는 데이터베이스 서버에 대한 현재 연결 수를 제한하는 것입니다. 새로운 연결마다 많은 메모리를 소비하고 서버 메모리를 소진하고 싶지 않기 때문입니다.

지속적인 연결 문제는 클라이언트 프로세스가 종료 될 때까지 절대로 닫히지 않는다는 것입니다. 클라이언트 프로세스는 PHP 요청을 처리하는 웹 서버 프로세스입니다. 따라서 동시 요청 수를 제한하도록 웹 서버를 구성하면 열린 영구 데이터베이스 연결 수를 제한 할 수 있습니다. Apache에서 MaxClients 매개 변수를 서버 RAM을 소모하지 않는 적절한 값으로 설정할 수 있습니다.

현재, 정적 사용자 콘텐츠 (CSS, JavaScript, 이미지 등)를 별도의 다중 스레드 웹 서버 (Nginx, lighttpd 등)로 이동하는 것이 좋습니다. 아파치가 많은 프로세스를 포크로 만드십시오.

+0

첫 번째 단락이 사실인지 잘 모르겠습니다. 연결은 중량이 많은 객체이므로 풀링해야합니다.특정 데이터베이스 서버가 100 또는 1000 회의 연결을 처리 할 수있는 것은 아닙니다. – cherouvim

+0

연결 풀링을 사용하는 유일한 이유는 아닙니다. 방금 그 이유 때문에 자주 사용한다고 말했지만 다른 것이있을 수 있습니다. – mlemos

0

일반적으로 연결 풀은 속도가 다른 문제만큼 중요하지 않은 환경에서는 사용되지 않습니다. 예를 들어, AOLServer는 동적 언어 (Tcl)를 사용하지만 성능이 뛰어나고 연결 풀을 사용합니다.