MAXDOP = 1, 병렬 처리를위한 쿼리 힌트 및 비용 임계 값


11

인스턴스가 MAXDOP1로 설정되고 특정 쿼리를 병렬로 처리하기 위해 쿼리 힌트를 사용하는 경우 실제로 병렬 처리를 수행할지 여부를 결정하기 위해 병렬 처리 비용 임계 값 값이 여전히 SQL에 의해 사용됩니까?

이 링크 는 CTFP MAXDOP가 1 인 경우 CTFP가 무시됨을 암시 하지만이 특정 정보를 파헤칠 수는 없었습니다 . 비용에 관계없이 요청이 1이 아닐 때 병렬로 진행되므로 쿼리 힌트가 없으면 의미가 없습니다 MAXDOP.

누구 든지이 두 요청의 예상되는 동작이 무엇인지 알려주십시오.

예 1 :

Instance Maxdop: 1 
CTFP: 50 
Query hint: Maxdop=2 
Query cost: 30

예 2 :

Instance Maxdop: 1
CTFP: 50
Query hint: Maxdop=2
Query cost: 70

답변:


20

인스턴스가 MAXDOP1로 설정되고 특정 쿼리를 병렬로 처리하기 위해 쿼리 힌트를 사용하는 경우 실제로 병렬 처리를 수행할지 여부를 결정하기 위해 병렬 처리 비용 임계 값 값이 여전히 SQL에 의해 사용됩니까?

간단한 답변 : 예 .

세부

여기에는 몇 가지 별도의 작업이 있으며 분리하는 것이 중요합니다.

  1. 이란 무엇입니까 효과적인 병렬 처리의 최대 학위 가능한 쿼리로는?

    이것에 기여한 사람들은 (광범위한 순서로) 다음과 같습니다.

    • 리소스 관리자 MAX_DOP설정
    • 쿼리 힌트 MAXDOP설정
    • max degree of parallelism예를 구성 옵션

    자세한 내용은 서버의 "최대 병렬 처리 수준"설정, 리소스 관리자의 MAX_DOP 및 쿼리 힌트 MAXDOP에 설명되어 있습니다. SQL Server는 어떤 것을 사용해야합니까? Microsoft SQL Server 고객 서비스 및 지원 담당 수석 에스컬레이션 엔지니어 Jack Li 아래 표는 해당 링크에서 재현 한 것입니다.

    병렬 처리 테이블

  2. 쿼리 계획이 병렬 처리를 사용합니까?

    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는 모든 병렬 계획으로 직렬 계획을 캐시합니다.


2

예 1 인스턴스 Maxdop : 1 CTFP : 50 쿼리 힌트 : Maxdop = 2 쿼리 비용 : 30

MAXDOP 쿼리 힌트는 최대 병렬 처리 수준 설정 인스턴스를 대체하지만 CTPF가 50이고 쿼리 비용이 30이므로 직렬 계획에 갈 수 있습니다.

예 2 인스턴스 Maxdop : 1 CTFP : 50 쿼리 힌트 : Maxdop = 2 쿼리 비용 : 70

여기서 MAXDOP 힌트가 있기 때문에 최대 병렬 처리 수준은 2로, CTFP는 50으로, 쿼리는 가능한 경우 Paul과 같이 병렬로 실행될 수 있습니다.

인스턴스에 MAXDOP가 1로 설정되어 있고 특정 쿼리를 병렬로 처리하기 위해 쿼리 힌트를 사용하는 경우 실제로 병렬로 처리할지 여부를 결정하기 위해 병렬 처리 비용 임계 값 값이 여전히 SQL에 의해 사용됩니까?

MAXDOP 힌트 는 최대 병렬 처리 수준의 인스턴스 전체 설정보다 우선합니다.

MAXDOP 힌트 인용

MAXDOP 번호 적용 대상 : SQL Server 2008부터 SQL Server 2017까지.

이 옵션을 지정하는 쿼리에 대해 sp_configure 및 리소스 관리자의 max degree of parallelism 구성 옵션을 재정의합니다. MAXDOP 쿼리 힌트는 sp_configure로 구성된 값을 초과 할 수 있습니다. MAXDOP가 Resource Governor로 구성된 값을 초과하면 데이터베이스 엔진은 Resource Governor MAXDOP 값을 사용합니다.

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