배치 모드에서 SQL Server 2014를 정확히 실행할 수있는 것은 무엇입니까?


21

열 저장소 인덱스가 쿼리에서 사용되는 경우 SQL Server는 일괄 처리 모드를 사용할 수 있습니다. 배치 모드에서 실행할 수있는 것과 그렇지 않은 것에 대한 문서는 얇습니다. 배치 모드 (녹색)에서 놀라운 수의 항목이 실행되는 다음 (동기 부여) 쿼리 계획을 살펴보십시오.

여기에 이미지 설명을 입력하십시오

(이것은 예상 계획입니다. 실제 계획을 사용하여 실제 실행 모드가 실제로 배치인지 확인했습니다.)

T1의 빌드 측에서만 columnstore 인덱스를 사용합니다. 모든 프로브 입력 (T2 및 T3)은 행 저장소입니다. 그들의 데이터는 배치 모드로 전환되는 것 같습니다. 나는 항상 배치 모드가 프로브 측을 통해서만 실행되는 데이터 스트림에 사용되고 있다고 생각했습니다.

데이터가 columnstore 인덱스에서 시작되지 않은 경우에도 데이터가 배치 모드로 전환 될 수 있습니다. SQL Server가 왜 행 저장소 전용 쿼리에도 배치 모드를 사용하지 않습니까? 그들 중 일부에게는 도움이 될 수 있습니다. 열 저장소 인덱스를 사용하는 것이 SQL Server를 배치 모드로 간주하는 데 필요한 공식 요구 사항입니까? 배치 모드를 유도하고 성능 향상을 실현하기 위해 columnstore 인덱스가있는 0 행 더미 테이블을 추가 할 수 있습니까?

SQL Server 2014에서 배치 모드로 정확히 실행할 수있는 것은 무엇입니까?


5
SQL Server가 행 저장소 전용 쿼리에도 배치 모드를 사용하지 않는 이유는 무엇입니까? CS는 현재 배치 모드 만 지원하므로 그들 중 일부에게는 도움이 될 수 있습니다. 열 저장소 인덱스를 사용하는 것이 SQL Server를 배치 모드로 간주하는 데 필요한 공식 요구 사항입니까? 예, CS가 필요합니다. Neugebauer가 연 행 저장소에 대한 배치 배치 모드 지원 구현이 여전히 연결 항목 입니다.
Kin Shah

2
2016 년에는 배치 모드를 BTW sqlmag.com/sql-server/
Martin Smith

답변:


30

SQL Server 2014에서 배치 모드로 정확히 실행할 수있는 것은 무엇입니까?

SQL Server 2014는 배치 모드 연산자의 원래 목록에 다음을 추가합니다.

  • 해시 외부 조인 (전체 조인 포함)
  • 해시 세미 조인
  • 해시 안티 세미 조인
  • 연합 모두 (연결 만)
  • 스칼라 해시 집계 (그룹 별 없음)
  • 배치 해시 테이블 빌드가 제거되었습니다.

데이터가 columnstore 인덱스에서 시작되지 않은 경우에도 데이터가 배치 모드로 전환 될 수 있습니다.

SQL Server 2012는 배치 연산자 사용이 매우 제한적이었습니다. 배치 모드 계획은 모양이 고정적이고 휴리스틱에 의존했으며 행 모드 처리로 전환 한 후에 배치 모드를 다시 시작할 수 없었습니다.

SQL Server 2014는 실행 모드 (배치 또는 행)를 쿼리 최적화 프로그램의 일반 속성 프레임 워크에 추가합니다. 즉, 계획의 어느 시점에서나 배치 모드로 전환하거나 배치 모드에서 전환 할 수 있습니다. 계획에서 보이지 않는 실행 모드 어댑터로 전환이 구현됩니다. 이러한 어댑터는 최적화 중에 도입 된 전환 수를 제한하기 위해 관련 비용이 있습니다. 이 새로운 유연한 모델을 혼합 모드 실행이라고합니다.

실행 모드 어댑터는 문서화되지 않은 TF 8607을 사용하여 옵티마이 저의 출력에서 ​​볼 수 있습니다 (슬프게도 사용자가 볼 수있는 실행 계획은 아님).

행 대 배치 대 어댑터

열 저장소 인덱스를 사용하는 것이 SQL Server를 배치 모드로 간주하는 데 필요한 공식 요구 사항입니까?

오늘은 그렇습니다. 이 제한의 한 가지 가능한 이유는 배치 모드 처리를 Enterprise Edition으로 자연스럽게 제한하기 때문입니다.

배치 모드를 유도하기 위해 columnstore 인덱스가있는 0 행 더미 테이블을 추가 할 수 있습니까?

그렇습니다. 또한 이러한 이유로 사람들이 단일 행 클러스터형 columnstore 인덱스와 교차 결합하는 것을 보았습니다. 거짓 열 더미 테이블에 조인을 남겨 두는 의견에서 제안한 것은 훌륭합니다.

-- Demo the technique (no performance advantage in this case)
--
-- Row mode everywhere
SELECT COUNT_BIG(*) FROM dbo.FactOnlineSales AS FOS;
GO
-- Dummy columnstore table
CREATE TABLE dbo.Dummy (c1 int NULL);
CREATE CLUSTERED COLUMNSTORE INDEX c ON dbo.Dummy;
GO
-- Batch mode for the partial aggregate
SELECT COUNT_BIG(*) 
FROM dbo.FactOnlineSales AS FOS
LEFT OUTER JOIN dbo.Dummy AS D ON 0 = 1;

더미 왼쪽 외부 조인을 사용하여 계획 :

더미 테이블이있는 배치 모드

문서가 얇다

참된.

최고의 공식 정보 출처는 설명 된 Columnstore IndexesSQL Server Columnstore 성능 조정 입니다.

SQL Server MVP Niko Neugebauer는 일반적으로 columnstore에 대한 훌륭한 시리즈를 제공 합니다 .

공식 리서치 문서가 아니지만 Microsoft Research 논문, SQL Server 컬럼 저장소 향상 (pdf) 의 2014 변경 사항에 대한 유용한 기술 정보가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.