2009-05-12 6 views
12

SQL보기에서 RO 액세스 권한이 있습니다. 이 쿼리는 시간 초과됩니다. 이것을 피하는 방법?Sql 쿼리 제한 시간을 피하는 방법

select 
    count(distinct Status) 
from 
    [MyTable] with (NOLOCK) 
where 
    MemberType=6 

내가 오류 메시지는 다음과 같습니다

Msg 121, Level 20, State 0, Line 0

A transport-level error has occurred when receiving results from the server (provider: TCP Provider, error: 0 - The semaphore timeout period has expired.)

+0

오류가 발생하기까지 얼마나 걸립니까? – codeulike

+0

최대 15-20 분까지 작동합니다. –

+0

오랜 시간입니다. 위의 예에서 [MyTable]이 테이블 또는 뷰 위에 있습니까? 보기 인 경우보기 정의를 게시하십시오. 우리는 최적화를 시도하고 제안 할 수 있습니다. – codeulike

답변

6

를 연결을 방해하는 네트워크 불안정이나 뭐 어떤 종류의 분명이 있지만 (15 분 당신이 당신의 네트워크에서 NAT 경계 또는 무언가를 횡단 할 수있는 세션을 삭제하는 것으로 보인다), I는 그러한 간단한 쿼리를 원한다고 생각할 것입니다.) 쿼리는 기대되는 시간 범위 (1 초) 내에서 잘 돌아옵니다.

저는 DBA와상의하여 MemberType, Status의 기본 테이블에 작성된 색인을 얻습니다. 기본 테이블이 하나도 없거나 뷰나 UDF에서 더 복잡하고 생성 된 SQL Server 2005 이상을 실행중인 경우 뷰를 인덱싱하는 방법을 고려해야합니다 (기본적으로 인덱싱 된 방식으로 뷰를 구체화).

2

당신은 MemberType에 인덱스를 둘 수 있었다.

+0

그가보기를 사용하는 경우 명시된 바와 같이 이것은 다소 어려울 것입니다 ... – MicSim

+0

RO 액세스는 더 많은 문제가 될 수 있지만 DBA에게 테이블에 추가하도록 요청할 수 있습니다. – JeffO

1

상태 열과 MemberType 열에 대해 인덱스가 정의되어 있습니까?

21

귀하의 질의는 아마도 괜찮을 것입니다. "세마포어 시간 초과 기간이 만료되었습니다."는 네트워크 오류이며 SQL Server 시간 초과가 아닙니다.

http://support.microsoft.com/kb/325487

분명히 사용자와 SQL Server간에 네트워크 문제가 있습니다.

편집 : 그러나 분명히 쿼리는 네트워크 오류를 내기 전에 15-20 분 동안 실행됩니다. 이는 매우 오랜 시간이므로 네트워크 오류가 긴 실행 시간과 관련 될 수 있습니다. 기본 View의 최적화가 도움이 될 수 있습니다.

예제의 [MyTable]이보기 인 경우보기 정의를 게시하여 최적화 할 수 있습니까?

3

"이벤트 원본 : Dhcp"에 대한 오류가 있는지 Windows 시스템 이벤트 로그에서 확인하십시오. DHCP와 관련된 네트워킹 오류 일 가능성이 큽니다. 주소 임대 기간이 만료되었습니다. SQL Server 또는 쿼리 자체와 관련된 문제 여서는 안됩니다.

인터넷에서 "세마포어 시간 초과 기간이 만료되었습니다"를 검색하면 문제 해결에 도움이 될만한 제안을 많이 얻을 수 있습니다. 불행히도 이 문제의 해결책은 인 것 같습니다.

+0

나는 이것이 5 년 전 이었음을 안다. 그러나 이것이 왜 고정 네트워크에서의 DHCP 문제라고 생각 하는가?그가 데이터베이스 서버를 운영하고 있다면 그는 아마도 고정 주소 체계를 가지고있을 것입니다. 나는 이것이 마치 무응답 인 것처럼 느낀다. –

0

몇 개의 레코드가 있습니까? 테이블에 인덱스가 있습니까? 이 시도 :

;with a as (
select distinct Status 
from MyTable 
where MemberType=6 
) 
select count(Status) 
from a 
관련 문제