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.