2013-05-23 2 views
3

우리는 PHP 5.3 및 pdo_dblib을 사용하여 다른 상자의 SQL Server 2008에 연결하고 있습니다.SQL 서버 정기 고정 지연

주기적으로 (매일 무작위로 하루에 10 회 이상) 쿼리에 관계없이 모든 SQL Select 쿼리를 실행하는 데 21.01 초가 소요되는 3 분의 기간이 있습니다. 이것은 PHP 내에서 (DB 쿼리 전과 후에) 타임 아웃됩니다.

SELECT 문은 최적화가있는 복합 조인에서 단일 테이블 및 명시 적 인덱스가있는 문까지 다양합니다.

PHP 요청시 DB 연결을 닫기 전에 세 개의 SELECT 문을 수행하면 총 시간은 63.03 초 (21.01 * 3)가됩니다. 2 문장 (42.02 초)에도 동일하게 적용됩니다.

SQL Server 도구를 사용하여이 스크립트의 실제 실행 시간을 0.01에서 0.45 초 사이로 추적했지만 이러한 차이점은 전반적인 지연에 반영되지 않는 것으로 나타났습니다 (항상 21.01로 고정되어 있습니다. 21.46, 등).

이 지연된 기간이 시작될 때 WinHTTP 프록시 트리거와의 상관 관계가있는 것으로 보이지만 해결되지 않은 WinHTTP 프록시가 비활성화되었습니다.

어떤 조언이 필요합니까?

+0

어떤 SQL Server 도구를 언급하고 있습니까? 프로파일 러 또는 SSMS? – PseudoToad

+0

SSMS를 사용 하였다. 모든 실행 시간은 1 초 미만이었습니다. – kevinnuut

+0

아직 사용하지 않는 경우 표준 perfmon 카운터 및 서버의 대기 상태 모니터링을 고려해야합니다. 그것들을 좋은 서버 측 추적과 함께 사용하면 보통 문제를 해결할 수 있습니다. – PseudoToad

답변

0

이들에 대한 실행 계획을 살펴보면 가장 많은 리소스를 차지하는 활동은 무엇입니까? 나는 Index Scans 또는 Key/Bookmark/RID 조회에 대한 경계를 분명히하고 있습니다. 또한 각 활동을 연결하는 선을보고 얼마나 많은 레코드가 적용되고 있는지 보았습니다. 마지막으로 예상 쿼리가 아닌 실제 쿼리 계획을 사용하여 쿼리를 실행 한 다음 각 동작에 대해 반환 된 실제 대 예상 행을 확인합니다. 그들은 평등해야합니다. 그렇지 않은 경우 통계가 표시되지 않는 것이 좋습니다.

+0

모든 인덱스가 명시 적으로 명시되어 있으므로 계획 실행 추정기가 필요하지 않습니다.우리는 PCAP 데이터와 관련된 오래된 연결이고 3 초 이상 실행 된 쿼리가 저장되지 않는다는 것을 확신합니다 (프로 시저 쿼리 저장). 우리는 통계를 업데이트했으며 여전히 통계가있었습니다. – kevinnuut