병렬 인덱스 작업
인덱스를 만들거나 다시 작성하는 인덱스 작업 또는 클러스터형 인덱스를 삭제하는 인덱스 작업을 위해 작성된 쿼리 계획에서는 여러 마이크로프로세서가 있는 컴퓨터에서 병렬 다중 스레드 작업을 할 수 있습니다.
[!참고]
병렬 인덱스 작업은 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가 있는 컴퓨터에서 병렬로 수행될 수 있지만 이러한 여러 인덱스 만들기 작업은 연속해서 수행됩니다.