2010-05-24 3 views
3

MySQL과 PHP를 2 개의 응용 프로그램 서버와 1 개의 데이터베이스 서버와 함께 사용하고 있습니다. 나는 다음과 같은 오류를 받고 있어요 (지금 1000 정도) 사용자 수의 증가와 :MySQL에서 너무 많은 연결 오류가 발생하는 PHP

SQLSTATE[08004] [1040] Too many connections 

max_connectionsmy.cnf1000로 설정하고 mysql.max_persistentphp.ini-1로 설정되는 매개 변수입니다.

MaxClients apache 매개 변수가 750이고 응용 프로그램 서버가 2 개이기 때문에 한 번에 최대 1500 개의 아파치 프로세스가 실행됩니다. here을 표시된대로

  • 나는 1500 max_connections 인상해야 하는가?
  • mysql.max_persistent을 750으로 설정해야합니까? (데이터베이스 서버가 응용 프로그램 서버와 동일하지 않기 때문에 성능상의 이유로 영구 연결이있는 PDO를 사용합니다)?
  • 아니면 다른 것을 시도해야합니까?

미리 감사드립니다.

+0

최대 연결을 무제한으로 설정해도 많은 도움이되지 않습니다. 느린 페이지의 출처를 확인하십시오. 그리고 이러한 느린 페이지를 최적화하십시오. – ajreal

답변

3

연결이 너무 빨리 닫히지 않고 기본 시간에 도달 할 때까지 스택을한다고 생각합니다. 나도 같은 문제가 있었고 wait_timeout으로 해결했다. 당신은 my.cnf 파일에 설정을 시도 할 수

set-variable = max_connections=1000 // max connection 
set-variable = max_user_connections=100 // max user connection per hour 
wait_timeout = 60 // wait timeout for connection in seconds 

난 당신을 제거 할 수 있다면 당신은 PHP 코드를 체크 아웃해야한다고 생각

+0

반응에 감사드립니다! 영구 연결을 사용합니까? 지속적 연결을 사용하고 있어도 wait_timeout을 설정해야합니까? – uzioriluzan

+0

아니요. 연결을 재활용하고 싶지 않기 때문에 영구 연결을 사용하지 않습니다. 정말로 지속적인 연결을 사용해야하는 경우 MySQL을 조정해야합니다. 이것은 많은 상황에서 많은 도움이되었습니다. http://www.day32.com/MySQL/ –

1

을 통과 한 60 초 동안 기존 연결을 종료합니다으로 지속적인 연결.

지속적인 연결 문제는 데이터가 클라이언트로 전송되고 PHP 인스턴스가 다음 고객에게 공개 될 때까지 PHP 인스턴스가 스크립트를 종료 한 후에도 열려 있도록 유지한다는 것입니다.

지속적인 연결의 또 다른 문제점은 일부 PHP 코드가 시작시와 다른 로케일 또는 임시 테이블을 사용하여 소켓을 벗어날 수 있다는 것입니다.

모든 연결에 대해 하나 또는 몇 개의 mysql_connects 및 데이터베이스 핸들이 코드의 다른 부분으로 전달되거나 GLOBAL로 유지되는 코드를 다시 작성할 수있는 경우 지속적인 연결을 잃어 버리면 성능에 미치는 영향을 무시할 수 있습니다.

물론 max_connections를 두 배로 늘리지는 않습니다. 어쨌든 PHP/Apache 자식이 매우 자주 종료되고 핸들을 닫을 때 PHP와는별로 유용하지 않습니다. max_connections는 다른 환경에서 더 유용합니다.

관련 문제