다음을 통해 공유


병렬 인덱스 작업

인덱스를 만들거나 다시 작성하는 인덱스 작업 또는 클러스터형 인덱스를 삭제하는 인덱스 작업을 위해 작성된 쿼리 계획에서는 여러 마이크로프로세서가 있는 컴퓨터에서 병렬 다중 스레드 작업을 할 수 있습니다.

[!참고]

병렬 인덱스 작업은 SQL Server 2008 Enterprise에서만 사용할 수 있습니다.

SQL Server는 다른 쿼리에 사용하는 것과 동일한 알고리즘을 사용하여 인덱스 작업에 대한 병렬 처리 수준(실행할 총 개별 스레드 수)을 결정합니다. 인덱스 작업에 대한 최대 병렬 처리 수준은 최대 병렬 처리 수준 서버 구성 옵션을 따릅니다. CREATE INDEX, ALTER INDEX, DROP INDEX 및 ALTER TABLE 문에서 MAXDOP 인덱스 옵션을 설정하여 개별 인덱스 작업에 대한 max degree of parallelism 값을 재정의할 수 있습니다.

데이터베이스 엔진에서 인덱스 실행 계획을 작성하는 경우 병렬 작업의 수는 다음 중에서 가장 낮은 값으로 설정됩니다.

  • 컴퓨터의 마이크로프로세서의 수 또는 CPU의 수

  • max degree of parallelism 서버 구성 옵션에 지정된 수

  • SQL Server 스레드에 대해 수행된 작업의 임계값을 아직 넘지 않은 CPU의 수

예를 들어 8개의 CPU가 있으나 max degree of parallelism이 6으로 설정된 컴퓨터의 경우 인덱스 작업에 대해 생성될 수 있는 최대 병렬 스레드 수는 6개입니다. 인덱스 실행 계획을 작성할 때 컴퓨터에 있는 5개의 CPU가 SQL Server 작업의 임계값을 초과하는 경우 실행 계획은 3개의 병렬 스레드만 지정합니다.

병렬 인덱스 작업의 주요 단계는 다음과 같습니다.

  • 조정 스레드는 신속하게 무작위로 테이블을 검색하여 인덱스 키의 분포를 예상합니다. 조정 스레드는 병렬 작업 수준에 해당하는 여러 키 범위를 만드는 키 경계를 설정합니다. 여기서 각 키 범위는 비슷한 개수의 행을 포함할 수 있도록 결정됩니다. 예를 들어 테이블에 4백만 개의 행이 있고 병렬 처리 수준이 4인 경우 조정 스레드는 각 집합에서 백만 개의 행을 갖는 4개의 행 집합을 구분하는 키 값을 결정합니다. 모든 CPU를 사용하도록 충분한 키 범위를 설정할 수 없는 경우 병렬 처리 수준도 이에 따라 줄어듭니다.

  • 조정 스레드는 병렬 작업 수준에 해당하는 여러 스레드를 디스패치하고 이러한 스레드가 작업을 완료할 때까지 대기합니다. 각 스레드는 해당 스레드에 할당된 범위 내의 키 값을 갖는 행만 검색하는 필터를 사용하여 기본 테이블을 검색합니다. 각 스레드는 키 범위에서 행의 인덱스 구조를 작성합니다. 분할된 인덱스의 경우 각 스레드는 지정한 수만큼의 파티션을 작성합니다. 파티션은 스레드 간에 공유되지 않습니다. 인덱스 작성 방법은 tempdb 및 인덱스 만들기를 참조하십시오.

  • 모든 병렬 스레드가 완료된 후 조정 스레드는 인덱스 하위 단위를 단일 인덱스에 연결합니다. 이 단계는 오프라인 인덱스 작업에만 적용됩니다.

개별 CREATE TABLE 또는 ALTER TABLE 문에는 인덱스를 만들어야 하는 여러 제약 조건이 있을 수 있습니다. 각 개별 인덱스 만들기 작업은 여러 CPU가 있는 컴퓨터에서 병렬로 수행될 수 있지만 이러한 여러 인덱스 만들기 작업은 연속해서 수행됩니다.