2014-09-06 4 views
1

동일한 테이블에서 동시에 여러 요청을 처리해야하는 웹 사이트에서 작업하고 있습니다. CakePHP에서 CakePHP의 간단한 인덱스 페이지를 만들었습니다.이 인덱스는 정확히 10 줄로 데이터베이스에서 데이터를 가져오고 동료는 동일한 페이지를 동시에 보는 1000 명의 사용자를 시뮬레이트하는 테스트를 실행했습니다. 즉, 1000 개의 동일한 요청이 발행됩니다 데이터베이스에. 문제는 약 500 건의 요청에서 데이터베이스가 반응을 멈추고 모든 것이 얼어 붙어서 프로세스를 중단해야한다는 것입니다.CakePHP 및 연결 풀링

각자의 요청이 각각의 연결에서 실행된다는 것은 왜 MySQL 서버가 압도 당했는지를 설명합니다. 온라인 검색과 SO에서, PHP는 기본적으로 Java 애플리케이션에서 수행 할 수있는 것처럼 연결 풀링을 지원하지 않는다는 것을 알 수 있습니다. 그러나 CakePHP 2.5.3에서 우리의 응용 프로그램을 기반으로, 이러한 제한 사항을 극복하는 몇 가지 기본 메커니즘이 있다고 생각합니다. 아마도 나는 옳은 일을하지 않을 것입니까?

모든 의견을 환영합니다. 가능한 모든 해결책을 다 써 버리고 싶습니다. 결과는거야 각 쿼리에 대한 동일 할 경우

+0

당신이'persistent' 옵션을 본 적이 [데이터베이스 구성] (http://book.cakephp.org/2.0/en/development/configuration.html#database-configuration)? – user221931

+0

나의 설정에서,'persistent => 'false''그리고 모든 정직에서 나는 데이터베이스에 지속적인 연결을 강제하는 것이 좋은 생각이 아닌가 ... 나는 현재 단계에서 오직 데이터베이스에서 10 개의 행을 복구하는 것입니다. 더 이상은 아닙니다. 왜 지속적인 연결을 사용해야합니까? 따라서 이론적으로 쿼리 이후에는 모든 리소스를 해제해야합니다. 맞습니까? – IMIordanov

+0

스크립트가 실행될 때마다 또는 연결이 여러 개있을 때마다 연결을 설정하고 제거하는 오버 헤드를 원하지 않으면 "persistent"를 사용하십시오. db가 왜 멈추는 지 이해 하시겠습니까? 로그를 읽어서 알아 냈어? db는 아마도 500 개의 간단한 10 개의 레코드 선택을 처리 할 수 ​​있어야합니다. 왜냐하면 그들은 아마도 쿼리 캐시되고 메모리에서 오는 것이기 때문에 다른 것들은 책임이 있다고 생각합니다. 또한''debug''가 설정된 상태에서 테스트하지 않기를 바랍니다. – user221931

답변