다음을 통해 공유


병렬 쿼리 처리

SQL Server에서는 마이크로프로세서(CPU)를 두 개 이상 사용하는 컴퓨터에서 쿼리 실행과 인덱스 작업을 최적화하는 병렬 쿼리 기능을 제공합니다. SQL Server는 여러 개의 운영 체제 스레드로 쿼리나 인덱스 작업을 병렬 수행할 수 있으므로 작업을 빠르고 효율적으로 완료할 수 있습니다.

쿼리를 최적화하는 동안 SQL Server는 병렬 실행에 적합한 쿼리나 인덱스 작업을 찾습니다. 이러한 쿼리에 대해 SQL Server는 쿼리 실행 계획에 교환 연산자를 삽입하여 병렬 실행할 쿼리를 준비합니다. 교환 연산자는 프로세스 관리, 데이터 재배포 및 흐름 제어를 제공하는 쿼리 실행 계획의 연산자입니다. 교환 연산자에는 하위 유형으로 Distribute Streams, Repartition StreamsGather Streams 논리 연산자가 포함되며 이 중에서 하나 이상이 병렬 쿼리를 위한 쿼리 계획의 실행 계획 출력에 표시될 수 있습니다.

교환 연산자를 삽입하면 병렬 쿼리 실행 계획이 완성됩니다. 병렬 쿼리 실행 계획은 스레드를 여러 개 사용할 수 있습니다. 병렬이 아닌 쿼리에서 사용하는 직렬 실행 계획은 실행에 한 스레드만 사용합니다. 병렬 쿼리에서 사용하는 실제 스레드 수는 쿼리 계획 실행 초기화 시 결정되며 계획의 복잡성과 병렬 처리 수준에 따라 다릅니다. 병렬 처리 수준에 따라 사용할 최대 CPU 수가 결정됩니다. 사용할 스레드 수를 의미하지는 않습니다. 병렬 처리 수준 값은 서버 수준에서 설정되며 sp_configure 시스템 저장 프로시저를 사용하여 수정할 수 있습니다. 또한 MAXDOP 쿼리 힌트나 MAXDOP 인덱스 옵션을 지정하여 개별 쿼리나 인덱스 문에 대해 이 값을 무시할 수 있습니다.

SQL Server 쿼리 최적화 프로그램은 다음 중 해당하는 조건이 있을 경우 병렬 실행 계획을 사용하지 않습니다.

  • 쿼리의 직렬 실행 비용이 크지 않아 병렬 실행 계획을 대안으로 고려할 필요가 없습니다.

  • 직렬 실행 계획이 특정 쿼리에 사용 가능한 병렬 실행 계획보다 더 빠릅니다.

  • 쿼리에 병렬로 실행할 수 없는 스칼라 또는 관계형 연산자가 포함되어 있습니다. 특정 연산자는 쿼리 계획의 한 섹션이 직렬 모드로 실행되도록 하거나 전체 계획이 직렬 모드로 실행되도록 할 수 있습니다.