columnstore 인덱스의 구조는 무엇입니까?


20

코드 명 SQL 서버 2012의 새로운 기능 중 하나 Denali는 IS Columnstore 인덱스입니다.

b- 트리 구조, 리프 수준과 b- 트리 페이지 간의 스토리지 차이, 포함 된 필드의 영향, 사용 최적화, 키 순서 등과 같은 일반적인 오래된 행 저장소 인덱스에 대해 잘 알고 있습니다.

columnstore 인덱스 의 내부 에 대한 좋은 정보를 얻는 데 어려움이 있습니다.

  • 그것은 어떻게 구성되어 있습니까?
  • B- 트리가 있습니까? 다른 구조가 있습니까?
  • 데이터는 어떻게 구성됩니까?
  • 어떤 종류의 특정 연산자를 사용하는 것이 가장 적합합니까?
  • 다른 안티 패턴을 사용할 때 피해야 할 다른 요소가 있습니까?

내가 그들에 대해 알 수있는 많은 것은 기본적으로 "정상"인덱스와 정확히 반대입니다. 즉 키 순서, 포함 필드 없음, 비 클러스터 전용입니다.

모든 통찰력에 감사드립니다.


위키 백과 페이지에는 컬럼 스토어 데이터베이스의 기술 구현에 대한 많은 팬 아웃이 있습니다. 인덱스는 키와 함께 단일 열의 열 저장소 데이터 구조 일뿐입니다. 아마도 비트 맵 인덱스를 사용하고 BTree를 사용했을 수 있습니다.
ConcernedOfTunbridgeWells

실제로 여러 열에 대한 것입니다. 또한 내가 다른 SS 구현과 같은 있으리라 믿고있어이 다른 제품보다 약간 다를 수 있습니다
JNK

MySQL의 경우에도 마찬가지입니다. developer.bazaarvoice.com/why-columns-are-cool 또한 Sybase IQ는 웅대 한 아빠입니다
gbn

3
@ConcernedOfTunbridgeWells-columnstore 인덱스는 비트 맵 인덱스를 사용합니까? 아니요. Columnstore 인덱스는 Vertipaq을 기반으로 독점 데이터 표현을 사용합니다. 비트 맵 인덱스와 동일하지 않으며 비트 맵 인덱스를 사용하지 않습니다. 그러나 적은 수의 고유 값으로 열을 필터링하는 데 걸리는 시간을 줄이는 등 비트 맵 인덱스와 유사한 이점이 있습니다.
Martin Smith

1
이 기능을 개발 한 Microsoft 팀원 인 Remus Rusanu는 다음과 같은 내용을 게시했습니다 . SQL Server 2012 내부 COLUMNSTORE 인덱스
Nick Chammas 2016 년

답변:


22

기둥 저장소 구조

열 저장소 데이터는 열당 하나 이상의 세그먼트 (일반 LOB 할당 단위)에 실제로 저장되며 일반적인 방식으로 분할 될 수도 있습니다. 각 세그먼트에는 약 100 만 행의 압축률이 높은 값 또는 값 참조가 포함되어 있습니다 (여러 압축 기술을 사용할 수 있음). 값 참조는 최대 2 개의 해시 사전 중 하나의 항목에 연결됩니다 .

쿼리는 실행 중에 실제 데이터 값이 필요할 때마다 사전의 세그먼트에서 데이터 값 ID를 찾은 상태로 사전이 메모리고정됩니다 (이 조회는 성능상의 이유로 가능한 한 지연됩니다).

세그먼트에는 또한 세그먼트에 저장된 최소값 및 최대 값과 같은 메타 데이터를 포함하는 헤더 레코드가 있습니다. 헤더의 정보는 종종 실행시 완전한 파티션 처리 를 제거 하는 데 사용될 수 있습니다 . 헤더 레코드 정보는 일반적인 LOB 데이터 루트 구조에 저장되므로 세그먼트를 제거하면 스토리지 엔진이 물리적 스토리지에서 LOB 데이터 페이지를 완전히 읽는 것을 건너 뛸 수 있습니다. 제거 가능성을 최대화하려면 Columnstore 인덱스가 생성 될 때 클러스터 된 인덱스 순서에 대한 종속성 을 포함하여 신중한 디자인 이 필요할 수 있습니다 .

특정 계획 운영자

SQL Server 2012에는 배치 모드라는 새로운 실행 모드가 도입되었습니다. 이 모드에서는 약 1000 행의 패킷이 운영자간에 전달되므로 프로세서 활용 효율이 크게 향상됩니다. 각 패킷 내에서 열 데이터는 벡터로 표시됩니다. 모든 계획 연산자가 배치 모드 작업을 지원하는 것은 아니지만 Columnstore Index Scan, Hash Inner Join, Batch Hash Table Build, Bitmap Filter, Hash Aggregate ( 스칼라 집계 아님), Filter 및 Compute Scalar (투영 및 표현 용)를 포함하는 예 평가). 쿼리 실행 계획이 예상 및 실제 실행 모드를 표시하도록 향상되었습니다.

안티 패턴

첫 번째 릴리스에는 허용 가능한 데이터 형식 에 대한 제약 조건을 비롯하여 많은 제한이 있습니다 . 가장 일반적인 유형이 지원됩니다. 지원되지 않는 데이터 유형은 DECIMAL18 진수,보다 큰 정밀도로 (N)VARCHAR(MAX), UNIQUEIDENTIFIER, CLR 유형 및 (VAR)BINARY.

사용 문자열 타입은 , OUTER JOIN, IN,EXISTS , NOT IN, OR, UNION ALL대안이 섹션에 연결된 문서에서 나타낸 바와 같이 일반적으로 특이 재기록 구문을 포함하지 않는 것을 이용 대폭 저감 성능 (로우 모드 실행)을 초래할 수있다.

더 많은 정보

Remus Rusanu는 여기 에서 훌륭한 개요를 블로그에 올렸 습니다 .

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