답변:
병렬 통계 업데이트는 SQL Server 2005부터 제공되었습니다. TechNet 기사 "Microsoft SQL Server 2005의 쿼리 최적화 프로그램에서 사용하는 통계"에 설명되어 있습니다 .
데이터 수집을 위해 생성 된 내부 쿼리는 전체 검색이 수행되는 경우 (명시 적으로 요청 된 것이 든 아니든) 일반적인 형식을 갖습니다.
SELECT
StatMan([SC0])
FROM
(
SELECT TOP 100 PERCENT
[Column] AS [SC0]
FROM [Table] WITH (READUNCOMMITTED)
ORDER BY [SC0]
) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 16)
공지 사항 MAXDOP
(사용자가 수동으로 힌트를 지정하는 방법이 없습니다하지만)가 힌트를. 샘플링 된 통계가 수집되는 경우 내부 쿼리는이 TABLESAMPLE
절을 사용하여 병렬 처리를 방지합니다. 엔진은 또한 MAXDOP 1
내부 쿼리에 대한 힌트를 생성하는데 , 이는 약간 중복됩니다.
병렬 처리 를 줄여야 하는 경우 Resource Governor (Enterprise 만 해당)를 MAXDOP
사용하여 내부 쿼리 의 힌트를 재정의 할 수 있습니다 .
SQL Server 2016은 병렬 샘플링 된 통계 업데이트를 추가합니다 .
SQL Server 2016 SP2부터는 MAXDOP
옵션을 사용할 수 있습니다 .
업데이트는 CREATE STATISTICS 및 UPDATE STATISTICS 문에 대한 MAXDOP 옵션에 대한 지원을 추가합니다 .
이 업데이트는 Microsoft SQL Server 2016 및 2017의 CREATE STATISTICS 및 UPDATE STATISTICS 문에 대한 MAXDOP 옵션에 대한 지원을 추가합니다.이를 통해 데이터베이스 또는 서버 수준에서 지정된 최대 병렬 처리 수준 (MAXDOP)에 대한 기본 설정을 재정의 할 수 있습니다.
참고 : 리소스 관리자를 사용하는 경우 결과 병렬 처리 수준은 작업 그룹 MAX_DOP 설정에 의해 제한됩니다.
예를 들어 Sales.SalesOrderDetail 테이블이 사용되고 여러 통계가 이미 생성되었다고 가정합니다. 이 경우 다음 스크립트는 각 통계량을 8의 병렬 처리 수준으로 업데이트합니다.
UPDATE STATISTICS Sales.SalesOrderDetail WITH MAXDOP = 8
업데이트 통계에는 내부 병렬 처리가 없습니다. FULLSCAN 또는 SAMPLING으로 실행 중인지 중요하지 않습니다. 물론 여러 SQL 에이전트 작업이나 다른 구성을 통해 서로 다른 연결로 여러 개의 UPDATE STATISTICS 명령을 한 번에 실행할 수 있습니다. 하드웨어 및 데이터의 정확한 상황에 따라 단순히 테이블 재 인덱싱이 FULLSCAN을 사용하는 UPDATE STATISTICS보다 빠르며 더 나은 옵션 일 수 있습니다.