2014-02-06 4 views
0

SugarCRM이 설치되어 있습니다.PHP에서 mysql_query가 동시에 쿼리를 차단합니까?

내 문제는 sugarcrm에서 검색을 수행 할 때 검색 쿼리가 다른 모든 쿼리를 차단할 때 발생합니다.

Id  User   Host     db    Command Time State Info 
49498 sugar  xx.xx.xx.xx:59568  sugarcrm  Query 5  Sorting result SELECT leads.id ,leads_cstm.cedula_c,leads_cstm.numplanilla_c,leads_cstm.profession_c,leads_cstm.b 
49502 sugar  xx.xx.xx.xx:59593  sugarcrm  Sleep 5    NULL 

쿼리의 아이디 49502을 볼 수 있듯이 나는 마무리하는 쿼리 49498 기다리고 추정이다.

제 쿼리 제 쿼리를 실행하는 looong 시간 지속 검색어가 인덱스 페이지에 대한 조회이다

홀수 일은하다 I 동일한 사용자로를 사용 MySQL의 두 단자를 열어 연결하면 내 sugarcrm 설치 두 쿼리를 동시에 실행할 수 있지만 브라우저에서 검색을 수행하고 새 탭을 열고 인덱스 페이지에 액세스하려고하면 첫 번째 탭 실행이 완료되거나 서버에서 시간 초과가 될 때까지 두 번째 탭이 멈 춥니 다.

나는 php를 모듈과 cgi로 테스트했다.

그래서 나는 mysql_query 함수 자체로 뭔가 있어야한다고 생각하니?

아이디어가 있으십니까? db (많은 테이블, 많은 콘텐츠)를 최적화하는 것은 매우 어렵지만 적어도 사이트는 동시에 사용할 수 있어야합니다.

+0

어쨌든 mysql_query를 사용하지 말고 mysqli_query를 사용하십시오. 성능에 관해서는 mysql_query 밑에서 어떤 일이 일어나고 있는지 확신 할 수 없지만, 클라이언트는 작업을 수행하는 동안 테이블에 잠금을 가할 수있는 옵션을 가지고 있습니다. 일부 소스 코드를 읽는 시간. CRM 소프트웨어가 테이블에 잠금을 설정하지 않았습니까? – Zarathuztra

답변

6

아마도 파일 기반 세션을 사용하고 있기 때문입니다. PHP는 세션 파일이 사용 중일 때 세션 파일을 잠그므로 특정 세션의 모든 요청이 본질적으로 직렬화됩니다.

session_write_close()을 사용하면 스크립트 단위로 세션 잠금을 해제하거나, 세션 변경 코드가 완료된 후 또는 자체 잠금 논리를 가질 수있는 자체 세션 핸들러를 구현할 수 있습니다.

+0

감사합니다. 나는 이것을 결코 확인한 적이 없지만 장시간 실행되는 PHP 요청이 다른 장치 (또는 심지어 브라우저)가 문제없이 연결할 수있는 동안 다른 사이트가 동일한 사이트에 액세스하는 것을 차단한다는 것을 알았습니다. 나는 항상 이것이 문제라고 생각했다. 단지 그것을 들여다 볼 시간이 없었다. –

+0

@ marc-b 당신 말이 맞았습니다. 견인차 브라우저를 사용하여 테스트했고 쿼리가 동시에 실행되었습니다. 감사합니다! db 기반 세션을 실행하면 여러 탭의 문제점을 피할 수 있습니까? – Cesar

+0

은 세션 처리기를 구현하는 방법에 따라 다릅니다. 너 자신을 굴리는 것은 당신에게 달려 있다는 것을 의미합니다. 만약 당신이 제대로하지 않는다면, 두 개의 병렬 요구가 서로의 데이터를 강타 할 수 있습니다. –

관련 문제