2011-01-18 4 views
3

저의 조직에서는 PostgreSQL 데이터베이스가 정책 상 20 연결 제한으로 생성됩니다. 연결 풀을 사용하는 여러 응용 프로그램이 실행 중일 때 이러한 연결 풀을 열어 유휴 상태로두기 때문에 연결 풀을 사용하는 여러 응용 프로그램이 작동 할 때 이러한 상호 작용이 잘되지 않습니다.데이터베이스의 연결 제한을 결정하는 방법은 무엇입니까?

DB와 접촉하는 응용 프로그램이 두 개 이상 있으면 예상대로 연결이 끊어집니다.

풀링 동작은 여기에서 새로운 것입니다. 지금까지는 웹 기반 DB 게이트웨이 (?!)를 통해 액세스를 직렬화하거나 풀링하지 않고 풀링 된 연결을 관리했습니다. 결과적으로, 나는 풀링이 어떻게 작동하는지 반복해서 설명해야한다. (프로젝트 진행 과정에서 한 사람의 문제 티켓 5 개).

  1. 위해 데이터베이스에 사용할 수있는 연결의 수를 증가시키는 고체, 논쟁의 여지가 이론적 근거는 수영장과 멋진 연주 : 내가 원하는 무엇

    는 다음 중 하나입니다.
    그렇다면 안전 한도는 무엇입니까? 한도를 20으로 유지해야하는 이유가 있습니까?

  2. 내가 틀렸던 이유로 우리는 수영장의 크기를 줄이거 나 모두 없애야합니다.

가치있는 부분은 다음과 같습니다. 이 중 하나가 구성되는 것과 관련이있는 경우 다음을 확인하십시오.

DB : PostgreSQL 8.2. 아니, 우리는이 문제의 일부로 업그레이드하지 않을 것입니다.
웹 서버 : 파이썬 2.7, 철탑 1.0, SQLAlchemy의 0.6.5, psycopg2

  • 이는 수동으로 구성된 엔진을 사용 SQLAlchemy의 ORM을 사용하여 시스템의 데이터에 액세스의 일부 측면은, 다른 사람이 데이터에 액세스하는 동안 사실에 의해 복잡 다른 PHP 팩토리 (Still sqlalchemy)를 사용하여 이전 PHP API와 일치하는 객체에 연결을 래핑하는 내 동료 중 하나가 작성했습니다.

작업 러너 : 파이썬 2.7, 셀러리 2.1.4, SQLAlchemy의 0.6.5, psycopg2

+0

나는 이것이 serverfault.com에서 더 잘 대답 될 것이라고 생각합니다. – David

답변

2

나는 동시 활동 당 하나의 연결을 필요로하는 것이 합리적이라고 생각하고, 동시 HTTP 요청이 동시에 있다고 가정하는 것이 합리적이다 실행.

이제 처리 할 동시 HTTP 요청 수는 a) 서버로드 및 b) 사용 가능한 CPU 수에 따라 조정해야합니다. 모든 것이 잘되면 각 요청은 어딘가에 (웹 서버, 응용 프로그램 서버 또는 데이터베이스 서버에서) CPU 시간을 소모하게됩니다. 이는 CPU가있는 것보다 더 많은 요청을 동시에 처리 할 수 ​​없음을 의미합니다. 실제로 모든 것이 잘 진행되는 것은 아닙니다. 일부 요청은 어떤 시점에서 입출력을 기다리고 CPU를 소비하지 않습니다. 따라서 CPU가있는 것보다 더 많은 요청을 동시에 처리하는 것이 좋습니다.

여전히 4 개의 CPU가 있다고 가정하면 20 개의 동시 요청을 허용 할 수 있습니다. 나는 동시에 처리 될 수있는 요청의 수를 늘리는 것보다 HTTP 요청을 줄이기를 원한다. 단일 요청에 둘 이상의 연결이 필요한 경우 응용 프로그램에 결함이 있습니다.

내 권장 사항은 한계를 극복하고 실제로 처리중인 요청 수와 비교하여 너무 많은 유휴 연결이 없는지 확인하는 것입니다.

관련 문제