통계 설정 IO 작업 테이블 / 작업 파일


21

나는 쿼리를 실행하여 계획을 생성합니다. 여기에 이미지 설명을 입력하십시오

통계 IO :

Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Workfile'. Scan count 128, logical reads 5952, physical reads 576, read-ahead reads 6080, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Table1'. Scan count 9, logical reads 90450, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

그래서 몇 가지 질문

1. 통계 IO가 왜 프로파일 러보다 높은 읽기를 표시합니까? .

에 관해서는 KB314648 프로파일 통계 IO보다 높은 숫자를보고하는 경우 경우는 OK입니다. 그러나 프로파일 러는 92283설명 된 쿼리에서 동일한 실행을 읽습니다. 프로파일 러가 작업 파일 / 작업 테이블 읽기를 계산하지 않음을 의미합니까?

2. "작업 테이블"과 "작업 파일"의 차이점

나는 그것을 발견 했다 :

  • 작업 파일을 사용하여 해시 조인 및 해시 집계에 대한 임시 결과를 저장할 수 있습니다.
  • 작업 테이블을 사용하여 쿼리 스풀, 로브 변수, XML 변수 및 커서에 대한 임시 결과를 저장할 수 있습니다.

그들 사이에 물리적 인 차이가 있습니까?

3.이 특별한 경우에 "작업대"가있는 이유는 무엇입니까?

논리적 읽기가 0 인 경우 왜 작업 테이블이 있습니까? 통계 IO에 필요할 수도 있기 때문에 통계 IO에 포함되어 있습니까 (예상치 못한 경우)?

technet에 있는 설명 이 모호한 것 같습니다 ..

4. Workfile에서 "실제 읽기"란 무엇을 의미합니까?

이는 쿼리에 부여 된 메모리가 충분하지 않아서 쿼리가 실행되는 동안 디스크에 데이터를 기록해야한다는 것을 의미합니까 (해시 일치시 노란색 경고)? 실제 읽기를 통해 통계 IO에서 작업 테이블 / 작업 파일을 볼 때마다 쿼리에 필요한 메모리가 부족하고 쿼리의 일부 중간 결과가 tempdb 디스크에 기록되어야한다고 가정 할 수 있습니까? 그리고 논리적 읽기 만 볼 때마다 RAM이 사용됩니까?

5. 하나의 "작업 파일"은 하나의 목적으로 사용되는 정확히 하나의 테이블을 의미합니까?

하나 이상의 작업 파일 / 작업 테이블이 있으면 어떤 작업 파일이 사용되는지 알 수 없습니까?


해시 일치에 대한 경고는 무엇입니까? 그것은 tempdb 유출입니까?
Tom V-팀 모니카

@TomV, yes- 유출 수준 1 및 유출 수준 2
Jānis

답변:


15

1. 통계 IO가 프로파일 러보다 더 높은 읽기를 표시하는 이유는 무엇입니까?

모릅니다 기술 자료 기사에서 언급 한 것처럼 다른 것을 측정하기 때문에 종종 차이가 있습니다. 내가 알고있는 추가 문서는 없습니다. 자세한 테스트를 통해 몇 가지 사항을 유추 할 수 있지만 버전과 빌드간에 일관성이 유지된다는 보장은 없습니다. 가능한 버그 를 설명하기 전에 의도 된 동작이 불일치 합니다 .

2. "작업 테이블"과 "작업 파일"의 차이점

둘 다 내부 객체입니다. 그렇지 않으면 이름이 제안하는 것과 거의 비슷합니다. 작업 테이블은 테이블과 같은 구조를 갖고 작업 파일은 파일과 같습니다. 자세한 구조는 보이지 않지만 메서드를 검사하고 디버거를 사용하여 실행 경로를 따라 일부 광범위한 기능을 식별 할 수 있습니다.

3.이 특별한 경우에 "작업대"가있는 이유는 무엇입니까?

작업 테이블은 항상 (행 모드) 해싱 작업에 필요합니다. 내부적으로 입력을 해시 파티션 (테이블 파티션과 관련이없는 오버로드 된 용어)에 분배하고 상태를 추적하는 데 사용됩니다. 통계 출력에서 ​​해시 작업 테이블이 0이 아닌 것을보고 한 적이 없지만 실제로는 보지 못했습니다.

4. Workfile에서 "실제 읽기"란 무엇을 의미합니까?

작업 파일은 해시 파티션이 유출 될 때 사용되는 메커니즘의 일부입니다. 문서화되지는 않았지만 물리적 및 미리 읽기는 실행 엔진이 작업 파일에서 유출 된 해시 파티션을 검색 할 때 발생합니다.

5. 하나의 "작업 파일"은 하나의 목적으로 사용되는 정확히 하나의 테이블을 의미합니까?

내가 기억 하듯이 여러 인스턴스가있을 수 있습니다. 특정 STATISTICS IO라인을 특정 객체 또는 계획 노드 와 관련시키는 방법은 없습니다 . 이것은 오랜 한계입니다. 내부 임시 개체에 적용되는지 테스트하지는 않았지만 SQL Server 2016에서이 변경이있을 수 있습니다.

궁극적으로, 사후 실행 계획 (또는 DMV, 확장 이벤트 등)을 통해 다른 정보를 살펴보면 배울 수있는 것 이상의 작업 파일 및 작업 테이블에 대한 출력 에서 배우는 것이 그리 유용 하지 않습니다 STATISTICS IO. 불완전한 답변에 대해 사과드립니다. 그러나 이것이 제 머리 위로 제공 할 수있는 최선입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.