병렬 인덱스 작업 구성
SQL Server Enterprise를 실행하는 다중 프로세서 컴퓨터에서는 다른 쿼리와 마찬가지로 인덱스 문이 다중 프로세스를 사용하여 인덱스 문과 관련된 검색, 정렬 및 인덱스 작업을 수행할 수 있습니다. 단일 인덱스 문 실행에 사용되는 프로세서 수는 max degree of parallelism 구성 옵션, 현재 작업 및 인덱스 통계에 따라 결정됩니다. max degree of parallelism 옵션은 병렬 계획 실행에 사용할 프로세서의 최대 개수를 결정합니다. SQL Server 데이터베이스 엔진이 시스템에서 진행 중인 작업이 많음을 감지하면 문이 실행되기 전에 인덱스 작업의 병렬 처리 수준이 자동으로 감소됩니다. 분할되지 않은 인덱스의 선행 키 열의 고유 값 수가 제한되거나 각 고유 값의 빈도가 상당히 다양한 경우 데이터베이스 엔진은 병렬 처리 수준을 줄일 수도 있습니다.
[!참고]
병렬 인덱스 작업은 SQL Server Enterprise, Developer 및 Evaluation Edition에서만 사용할 수 있습니다.
쿼리 최적화 프로그램에서 사용하는 프로세서 수는 대개 최적의 성능을 제공합니다. 그러나 매우 큰 인덱스를 생성, 다시 작성 및 삭제하는 작업에서는 리소스가 많이 소모되므로 인덱스 작업 중 다른 응용 프로그램 및 데이터베이스 작업에 사용할 리소스가 부족할 수 있습니다. 이 문제가 발생하면 MAXDOP 인덱스 옵션을 통해 인덱스 작업에 사용할 프로세서 수를 제한하여 인덱스 문 실행에 사용되는 최대 프로세서 수를 직접 구성할 수 있습니다.
MAXDOP 인덱스 옵션을 지정한 쿼리에 대해서만 max degree of parallelism 구성 옵션이 무시됩니다. 다음 표에서는 최대 병렬 처리 수준 구성 옵션 및 MAXDOP 인덱스 옵션에 지정할 수 있는 유효한 정수 값을 보여 줍니다.
값 |
설명 |
---|---|
0 |
서버가 현재 시스템 작업에 따라 사용되는 CPU의 수를 결정하도록 지정합니다. 이 값은 기본값이며 권장 설정입니다. |
1 |
병렬 계획이 생성되지 않습니다. 작업이 직렬로 실행됩니다. |
2-64 |
지정된 값으로 프로세서 수를 제한합니다. 현재 작업에 따라 지정된 것보다 적은 수의 프로세서가 사용될 수도 있습니다. 사용 가능한 CPU 수보다 더 큰 수를 지정하면 사용 가능한 실제 CPU 수가 사용됩니다. |
다음은 병렬 인덱스 실행 및 MAXDOP 인덱스 옵션이 적용되는 Transact-SQL 문입니다.
CREATE INDEX
ALTER INDEX REBUILD
DROP INDEX(클러스터형 인덱스에만 해당)
ALTER TABLE ADD (인덱스) CONSTRAINT
ALTER TABLE DROP (클러스터형 인덱스) CONSTRAINT
max degree of parallelism 구성 옵션에 사용되는 모든 의미 규칙은 MAXDOP 인덱스 옵션이 사용된 경우 적용할 수 있습니다. 자세한 내용은 max degree of parallelism 옵션을 참조하십시오.
LOB_COMPACTION를 지정하거나 지정하지 않고 ALTER INDEX REORGANIZE를 실행할 경우 max degree of parallelism 값은 단일 스레드 작업이 됩니다. ALTER INDEX REORGANIZE 문에서 MAXDOP 인덱스 옵션을 지정할 수 없습니다.
온라인 인덱스 작업
온라인 인덱스 작업은 인덱스 작업 중 동시 사용자 작업을 허용합니다. MAXDOP 인덱스 옵션을 사용하여 온라인 인덱스 작업에만 사용되는 최대 프로세서 수를 제어할 수 있습니다. 이렇게 하면 인덱스 작업에 사용되는 리소스와 현재 사용자가 사용하는 리소스를 적절히 조정할 수 있습니다. 자세한 내용은 온라인으로 인덱스 작업 수행을 참조하십시오.
분할 인덱스 작업
쿼리 최적화 프로그램에서 작성 작업에 병렬 처리 수준을 적용할 경우 정렬이 필요한 분할 인덱스 작업의 메모리 요구 사항이 늘어날 수 있습니다. 병렬 처리 수준이 높을수록 메모리 요구 사항이 늘어납니다. 자세한 내용은 분할 인덱스에 대한 특수 지침을 참조하십시오.
예
다음 예는 ProductVendor 테이블에 IX_ProductVendor_VendorID 인덱스를 만들고 max degree of parallelism 옵션을 8로 설정합니다. 데이터베이스 엔진에서는 서버에 프로세서가 8개 이상 있다고 가정하고 인덱스 작업의 실행에 사용되는 프로세서 수를 8개 이하로 제한합니다.
USE AdventureWorks2008R2;
GO
IF EXISTS (SELECT name FROM sys.indexes
WHERE name = N'IX_ProductVendor_VendorID')
DROP INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor;
GO
CREATE INDEX IX_ProductVendor_VendorID
ON Purchasing.ProductVendor (BusinessEntityID)
WITH (MAXDOP=8);
GO