문제

SQL Server 2005와의 연결을 잃어버린 일부 클라이언트 기계를 조사하는 동안 웹에서 다음과 같은 코드 라인을 만났습니다.

sys.dm_exec_query_optimizer_info where counter = 'timeout'을 선택하십시오.

서버 에서이 쿼리를 실행할 때 다음과 같은 결과를 얻습니다.

카운터 - 발생 - 값

시간 초과 -9100-1

내가 결정할 수있는 한, 이는 쿼리 옵티마이저가 서버에 대해 실행되는 쿼리를 9100 번 최적화하려고 시도하면서 타이밍을 의미한다는 것을 의미합니다. 그러나 SQL Server 오류 로그에서 타임 아웃 오류가 표시되지 않으며 최종 사용자는 시간 초과 특정 오류를보고하지 않았습니다.

누구 든지이“발생”수의 의미를 말해 줄 수 있습니까? 이것이 우리가 걱정해야 할 문제입니까?

도움이 되었습니까?

해결책

이 카운터는 연결 문제와 관련이 없습니다.

SQL Server는 최상의 가능한 계획을 수집하는 데 영원히 소비하지 않습니다 (적어도 추적 플래그를 사용하지 않고).

최적화 프로세스의 시작 부분에서 두 값을 계산합니다.

  1. 충분한 계획의 비용
  2. 쿼리 최적화에 지출하는 최대 시간 (이는 시계 시간보다는 수행 된 변환 작업 수에서 측정됩니다).

임계 값보다 비용이 낮은 계획이 발견되면 계속 최적화 할 필요는 없습니다. 또한 예산이 책정 된 작업의 수를 초과하면 최적화도 종료되며 지금까지 찾은 최상의 계획을 반환합니다.

최적화가 시작된 이유는 StatementOptmEarlyAbortReason 기인하다. 실제로 세 가지 가능한 값이 있습니다.

  • 충분히 좋은 계획을 찾았습니다
  • 시간 초과
  • 메모리 제한이 초과되었습니다.

타임 아웃은 당신이 묻는 카운터를 증가시킵니다. sys.dm_exec_query_optimizer_info.

추가 독서

다른 팁

발생 열에는 카운터가 증가한 횟수가 증가하고 값 열은이 카운터의 내부 열입니다.

여기를 봐

죄송합니다 선적 서류 비치 이것은 내부라고 말하면.

다른 링크를 기반으로, 이것이 내부 엔진 타임 아웃을위한 것이라고 생각합니다 (예 : SET QUERY_GOVERNOR_COST_LIMIT)

클라이언트가 배치를 중단시키기 때문에 클라이언트 타임 아웃도 SQL 로그인하지 않습니다.

자세한 내용이 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top