2012-09-04 2 views
2

나는 PHP 응용 프로그램에서 보고서를 실행하고 90 초 이내에 SQL 서버에 대해 약 1 백만 개의 SQL 쿼리를 실행하고 있습니다. 아무도이 웹 기반 응용 프로그램을 사용할 수 없으면 계란 타이머가 작동하지만 보고서가 만료되거나 완료 될 때까지 아무 것도로드되지 않습니다. 나는이 문제를 고립 된 환경에서 테스트 해 보았습니다. 브라우저에서 보고서를 실행 한 다음 다른 브라우저 창에서이 애플리케이션 사이트에 대한 모든 작업을 중단했습니다. 테스트 환경에 대한PHP 동시 요청이 걸렸습니까?

일부 세부 정보 : IIS에서

Windows 2008 R2 x64 - IIS 7.5 - PHP 5.3.8 via FastCGI 
Windows 2008 R2 x64 - SQL Server 2008 R2 x64 

FastCGI를 설정 :

Instance MaxRequests = 200 
Max Instances = 16 
Activity Timeout = 70 
Idle Timeout = 300 
Queue Length = 1000 
Rapid Fails PerMin = 10 
Request Timeout = 90 

는 SQL 요청의 각 SQL 서버 측 60ms 이하 완료됩니다. 웹 서버와 SQL 서버 모두의 CPU로드는 10 % 미만입니다. 보고서를 실행할 때 웹 서버에는 16GB RAM이 있으며 약 60 % RAM을 사용할 수 있습니다.

PHP는 SQL 서버에 너무 많은 요청을 발사하여 다른 요청을 처리하기에는 너무 바빠 보인다. 이 경우 PHP가 더 많은 동시 요청을 처리하도록 조정할 수있는 무언가가 있어야합니다.

아는 사람 있습니까? 도와주세요!

+0

세션 잠금? –

+2

호기심에서 완전히 다른 브라우저를 통해 사이트에 액세스하려 했습니까? 예를 들어 Firefox를 사용하고 다른 브라우저를 사용하고 있습니다. 그냥 사이트 전체가 아닌 잠겨있는 세션 일 수도 있다는 생각을 배제하려고합니다. 여러 브라우저를 사용하면 여러 개의 세션이 만들어집니다. 동일한 브라우저의 다른 탭은 동일한 세션을 공유합니다. –

+0

질문 [this] (http://stackoverflow.com/questions/12070345/php-multiple-ajax-requests-first-request-block-second-request/12070517) 질문. 아마도 당신은 같은 문제가 있습니다 –

답변

4

나는 어둠 속에서 여기저기서 찔러보고 세션 잠금 때문이라고 가정합니다.

PHP와 함께 제공되는 표준 세션 처리기를 사용하면 스크립트 실행 중에 (자문) 쓰기 잠금을 사용하여 세션 파일이 손상되지 않도록합니다 (session_write_close()이 먼저 호출되지 않는 한).

동일한 세션에 액세스하려고하는 다른 스크립트 (브라우저가 동일한 쿠키 값을 전달 함)는 잠금이 해제 될 때까지 기다릴 것입니다.

두 개의 완전히 다른 브라우저를 사용하여 두 명의 사용자를 시뮬레이트하여 확인할 수 있습니다 (보고서를 실행하고 다른 하나는 사이트에 액세스). 그게 효과가 있다면, 당신은 세션 잠금 때문이라고 확신합니다. 당신이 보고서를 실행 할 때 알 수 있기 때문에

는 문제가되지 않습니다,하지만 그럼에도 불구하고 문제가 발생할 수 있습니다 경우 두 가지 고려할 수 :

  1. 가 세션을 시작하지 않습니다를 보고서 스크립트 (무단 사용자가 보고서 스크립트를 실행하려고 시도 할 수도 있음을 의미 함)
  2. 사용자의 신원을 확인한 후 을 사용하여 불평 작업이 시작되기 전에 세션을 닫습니다.
+0

많은 조언을 주셔서 감사합니다.하지만 사용자가 세션 잠금을 어떻게 받습니까? 대부분은 자신의 로컬 PC에서 웹 프록시를 통해 웹 사이트에 연결합니다. 사용자 중 한 명에게 문제를 복제하기 위해 자신의 PC에서이 보고서를 실행 한 다음 IIS 서버에 로그온했지만 보고서가 만료 될 때까지 동일한 문제가 발생했습니다. 우리 모두 IE 8 브라우저를 사용했습니다. – user1646590

+0

왜 그런 일이 일어날 지 확신하지 못합니다. 특히 두 개의 다른 브라우저에서 작동하는지 확인하기위한 테스트를 수행 했으므로 ... 프록시가 수행하는 장난 꾸러기가 무엇인지는 모르겠지만 어쨌든 자체 쿠키를 보내서는 안됩니다. –

+0

문제의 근본 원인이 다를 수 있습니다. 어쨌든 많은 도움을 주셔서 감사합니다. – user1646590

관련 문제