2014-07-10 3 views
0

질문과 관련하여 현재 생산 환경에 대해 설명하겠습니다.c3p0 연결 풀링을 사용할 때 MySQL에 가장 적합한 최대 연결 설정은 무엇입니까?

  • 각 클라이언트는 우리의 봄/최대 절전 모드 응용 프로그램
  • 각 배포는 자체 데이터베이스의 도착의 배포를 가져옵니다.

이제 서버에 위쪽 300 클라이언트있다 I는 (3)의 증가 값과 (20 개) 연결의 최대와 최소 1 연결 풀 크기 C3P0 구성한. 그래서 내 질문은, MySQL에 대한 최대 연결은 무엇입니까? 최대 풀 크기와 클라이언트 수를 곱해야합니까 (20 * 300 = 6000)? 아니면 덜해야하나요? c3p0에 3 개의 연결이 이미 있고 다른 연결을 얻으려고하면 오류가 발생하고 MySQL은 최대입니다.

나는 모든 클라이언트가 동시에 최대 수를 필요로하지 않을 것이라고 생각하지만 프린지 경우가 발생하면 오류가 발생하지 않도록하고 싶습니다.

답변

1

이론적으로 말하자면 MySQL은 최대 6000 개의 연결을 볼 수 있기 때문에 안전합니다. 그 대답입니다.

하지만 실제로 6000 연결을 열지 않기를 바랍니다. 각 풀의 minPoolSize가 1이고 maxPoolSize가 20 인 경우 클라이언트의 대기 상태가 예상되지만 사용량이 급증 할 것으로 예상됩니다. 시간이지나면서 스파이크의 상관 관계가 높지 않으면 보통 부하가 훨씬 적어야합니다.

기본적으로 c3p0 연결 풀은 급격한 증가로 증가하지만 급증하지 않습니다. maxIdleTime 또는 더 나은 경우 maxIdleTimeExcessConnections을 c3p0 풀에 설정하면 대기 풀의 연결 수가 적어지고 이론적 최대 값 인 6K에 도달 할 가능성을 줄일 수 있습니다.

MySQL 설정과 관련하여 6K로 설정하여 안전성을 높이거나 DBMS를 과도하게 사용하는 경우 느려지지 않고 오류를 볼 수 있도록 훨씬 더 낮게 설정할 수 있습니다. 예상되는 최대 사용량을 예측하고 MySQL 최대치를 두 배로 설정하고 예상 부하가 크게 저하되었는지 확인하십시오 (예 : DBMS가 연결을 거부하여 오류가 발생하는 경우).

300 개의 서로 다른 데이터베이스를 사용하면 300 개의 c3p0 데이터 소스가 포함되어 스레드 및 스레드 관리에 높은 오버 헤드가 발생할 수 있습니다. c3p0의 numHelperThreads의 기본값은 3이며, 그보다 낮추고 싶지는 않습니다. 그래서, 그것은 생각할 사항입니다.

+0

일반적으로 트래픽이 많지는 않지만 한 번에 약 600 건의 요청이있는 고객이 한 시간에 약 1000 ~ 2000 건의 요청을 보냈습니다. 대답 주셔서 감사합니다, 그것은 명확하게 도움이됩니다. 클라이언트의 최대 연결 수를 일반적으로 얼마나 사용량이 많은지에 따라 줄일 수도 있습니다. 그것은 모두 미세 조정에 관한 것입니다. – Zoidberg

관련 문제