인스턴스가 MAXDOP
1로 설정되고 특정 쿼리를 병렬로 처리하기 위해 쿼리 힌트를 사용하는 경우 실제로 병렬 처리를 수행할지 여부를 결정하기 위해 병렬 처리 비용 임계 값 값이 여전히 SQL에 의해 사용됩니까?
간단한 답변 : 예 .
세부
여기에는 몇 가지 별도의 작업이 있으며 분리하는 것이 중요합니다.
이란 무엇입니까 효과적인 병렬 처리의 최대 학위 가능한 쿼리로는?
이것에 기여한 사람들은 (광범위한 순서로) 다음과 같습니다.
- 리소스 관리자
MAX_DOP
설정
- 쿼리 힌트
MAXDOP
설정
max degree of parallelism
예를 구성 옵션
자세한 내용은 서버의 "최대 병렬 처리 수준"설정, 리소스 관리자의 MAX_DOP 및 쿼리 힌트 MAXDOP에 설명되어 있습니다. SQL Server는 어떤 것을 사용해야합니까? Microsoft SQL Server 고객 서비스 및 지원 담당 수석 에스컬레이션 엔지니어 Jack Li 아래 표는 해당 링크에서 재현 한 것입니다.
쿼리 계획이 병렬 처리를 사용합니까?
SQL Server 쿼리 최적화 프로그램은 항상 직렬 계획을 먼저 찾습니다 *.
그런 다음 :
- 추가 최적화가 정당화됩니다. 과
- 최적의 직렬 계획 비용이
cost threshold for parallelism
구성 값을 초과합니다
... 최적화 자가 병렬 계획을 찾으려고 시도 합니다.
그런 다음 :
- 병렬 계획이 발견되었습니다 (즉 가능합니다). 과
- 병렬 계획의 비용이 최고의 직렬 계획보다 적습니다.
... 병행 계획이 만들어 질 것입니다.
참고 :cost threshold for parallelism
만이 영향을 병렬 계획의 최적화 외모 여부. 병렬 계획이 캐시되면 CTFP 설정에 관계없이 재사용 할 때 (스레드가 사용 가능한 한) 병렬 처리를 사용하여 실행됩니다.
예
maxdop 1 인스턴스와 쿼리 힌트 maxdop 2를 사용하는 두 예제 모두 유효 가용 DOP 는 2입니다. 병렬 계획을 선택하면 DOP 2가 사용됩니다.
실시 예 1
CTFP가 50이고 가장 저렴한 직렬 계획 발견 비용이 30이면 SQL Server는 병렬 계획을 찾지 않습니다 . 일련 계획이 생성됩니다.
실시 예 2
CTFP가 50이고 가장 저렴한 직렬 계획 발견 비용이 70이면 SQL Server는 병렬 계획을 찾으려고 시도 합니다. 이 계획 (있는 경우)의 비용이 70 미만인 경우 (일련 계획 비용) 병렬 계획이 생성됩니다.
쿼리 최적화의 최종 결과는 항상 단일 또는 캐시 된 단일 계획 입니다. 옵티마이 저는 search0 (TP) 및 search1 (QP) 단계 에서 직렬 계획 만 찾습니다 .
이 있다 다음 (한 바와 같이) 다시 실행 search1 요구와 병렬 계획을 생성한다. 그런 다음 지금까지 최고의 전체 계획 비용을 기준으로 직렬과 병렬을 선택합니다. 최적화가 search2 (완전 최적화) 로 넘어가 는 경우에는 그 선택이 구속력이 있습니다. 각 최적화 단계에서는 여러 가지 대안을 고려하지만 단계의 출력은 항상 단일 또는 최상의 계획입니다.
나는 Myth 에서 이것에 대해 썼다 : SQL Server는 모든 병렬 계획으로 직렬 계획을 캐시합니다.