병렬 통계 ​​업데이트


14

SQL Server 2008 이상 UPDATE STATISTICS WITH FULLSCAN에서 단일 스레드 작업입니까, 아니면 병렬 처리를 사용할 수 있습니까? 기본 샘플링으로 통계 업데이트는 어떻습니까? 병렬 처리를 사용할 수 있습니까? MAXDOP업데이트 통계로 지정하는 옵션이 표시되지 않습니다 .

답변:


22

병렬 통계 ​​업데이트는 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은 병렬 샘플링 된 통계 업데이트를 추가합니다 .


1

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

-3

업데이트 통계에는 내부 병렬 처리가 없습니다. FULLSCAN 또는 SAMPLING으로 실행 중인지 중요하지 않습니다. 물론 여러 SQL 에이전트 작업이나 다른 구성을 통해 서로 다른 연결로 여러 개의 UPDATE STATISTICS 명령을 한 번에 실행할 수 있습니다. 하드웨어 및 데이터의 정확한 상황에 따라 단순히 테이블 재 인덱싱이 FULLSCAN을 사용하는 UPDATE STATISTICS보다 빠르며 더 나은 옵션 일 수 있습니다.


마크 다운에 대해 사과드립니다. 그러나 당신이 무슨 말을하는지 전혀 모릅니다. 이 백서 msdn.microsoft.com/en-us/library/dd535534(v=sql.100).aspx "전체 스캔에 대한 병렬 통계 ​​수집 : 전체 스캔으로 수집 된 통계의 경우 단일 통계 개체를 동시에 생성 할 수 있습니다. 분할되지 않은 테이블과 분할 된 테이블 둘 다 " 그러나 3 천만 행 테이블에서 전체 스캔으로 UPDATE STATISTICS를 사용하면 병렬 처리를 볼 수 없습니다.
SQL Learner

또한 업데이트 통계는 스키마 안정성 잠금을 사용하므로 다른 업데이트 통계를 실행하면 이전 업데이트 통계가 완료 될 때까지 기다립니다.
SQL Learner

4
@SQLLearner : 위반은 없지만이 답변의 정확성에 상관없이 백서를 읽은 경우 왜이 질문을합니까? 요청한 모든 것에 대한 답변을 제공합니다. 특정 시나리오에 대한 병렬 처리가 표시되지 않으면 질문 및 기타 관련 세부 정보를 표시하도록 질문을 편집하십시오.
Jon Seigel

Jon Seigel은 질문을 게시 한 후 백서를 찾아서 읽었지만 웹을 검색하면 업데이트 통계가 병렬 처리를 사용할 수 있는지 확실하지 않습니다.
SQL Learner

4
백서 및 sql2008과 관련하여 귀하가 옳습니다. 나는 그 백서를 읽었습니다. 내 머리 속 정보가 오래되었습니다. 인덱스 재 작성, 업데이트 통계, 전체 스캔 대 샘플, 작업에 필요한 시간 및 통계 페이지의 데이터의 확률 적 품질과 관련하여 sql2005 또는 sql2000에 많은 문제가있었습니다. 나는 그 모든 고통이 다리 아래의 물이라고 생각합니다. 다른 테이블에서 UPDATE STATS를 병렬로 실행할 수 있다고 말하지만 가치가있는 것보다 더 많은 문제처럼 보이며 가치가 너무 많은 I / O 경합이있을 수 있습니다.
다린 해협
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.