sys.dm_exec_query_optimizer_info "timeout"레코드는 무엇을 나타 냅니까?
-
03-07-2019 - |
문제
SQL Server 2005와의 연결을 잃어버린 일부 클라이언트 기계를 조사하는 동안 웹에서 다음과 같은 코드 라인을 만났습니다.
sys.dm_exec_query_optimizer_info where counter = 'timeout'을 선택하십시오.
서버 에서이 쿼리를 실행할 때 다음과 같은 결과를 얻습니다.
카운터 - 발생 - 값
시간 초과 -9100-1
내가 결정할 수있는 한, 이는 쿼리 옵티마이저가 서버에 대해 실행되는 쿼리를 9100 번 최적화하려고 시도하면서 타이밍을 의미한다는 것을 의미합니다. 그러나 SQL Server 오류 로그에서 타임 아웃 오류가 표시되지 않으며 최종 사용자는 시간 초과 특정 오류를보고하지 않았습니다.
누구 든지이“발생”수의 의미를 말해 줄 수 있습니까? 이것이 우리가 걱정해야 할 문제입니까?
해결책
이 카운터는 연결 문제와 관련이 없습니다.
SQL Server는 최상의 가능한 계획을 수집하는 데 영원히 소비하지 않습니다 (적어도 추적 플래그를 사용하지 않고).
최적화 프로세스의 시작 부분에서 두 값을 계산합니다.
- 충분한 계획의 비용
- 쿼리 최적화에 지출하는 최대 시간 (이는 시계 시간보다는 수행 된 변환 작업 수에서 측정됩니다).
임계 값보다 비용이 낮은 계획이 발견되면 계속 최적화 할 필요는 없습니다. 또한 예산이 책정 된 작업의 수를 초과하면 최적화도 종료되며 지금까지 찾은 최상의 계획을 반환합니다.
최적화가 시작된 이유는 StatementOptmEarlyAbortReason
기인하다. 실제로 세 가지 가능한 값이 있습니다.
- 충분히 좋은 계획을 찾았습니다
- 시간 초과
- 메모리 제한이 초과되었습니다.
타임 아웃은 당신이 묻는 카운터를 증가시킵니다. sys.dm_exec_query_optimizer_info
.
추가 독서
다른 팁
발생 열에는 카운터가 증가한 횟수가 증가하고 값 열은이 카운터의 내부 열입니다.
죄송합니다 선적 서류 비치 이것은 내부라고 말하면.
다른 링크를 기반으로, 이것이 내부 엔진 타임 아웃을위한 것이라고 생각합니다 (예 : SET QUERY_GOVERNOR_COST_LIMIT
)
클라이언트가 배치를 중단시키기 때문에 클라이언트 타임 아웃도 SQL 로그인하지 않습니다.
자세한 내용이 있습니까?