Columnstore 인덱스 - 새로운 기능

적용 대상:yesSQL Server(지원되는 모든 버전) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics yesAnalytics Platform System(PDW)

SQL Server의 각 버전 및 SQL Database, Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)의 최신 릴리스에 사용할 수 있는 columnstore 기능에 대한 요약입니다.

참고

SQL Database의 경우 columnstore 인덱스는 Azure SQL Database Premium 계층 및 Standard 계층(S3 이상) 및 모든 vCore 계층에서 제공됩니다. SQL Server 2016(13.x) SP1 이상의 경우 columnstore 인덱스는 모든 버전에서 제공됩니다. SQL Server 2016(13.x)(SP1 이전) 및 이하 버전의 경우 columnstore 인덱스는 엔터프라이즈 버전에서만 제공됩니다.

제품 릴리스에 대한 기능 요약

이 테이블은 Columnstore 인덱스 및 이를 사용할 수 있는 제품에 대한 주요 기능을 요약합니다.

Columnstore 인덱스 기능 SQL Server 2012(11.x) SQL Server 2014(12.x) SQL Server 2016(13.x) SQL Server 2017(14.x) SQL Server 2019 (15.x) SQL Database Azure Synapse Analytics
다중 스레드 쿼리에 대한 일괄 처리 모드 실행
단일 스레드 쿼리에 대한 일괄 처리 모드 실행
보관 압축 옵션
스냅샷 격리 및 커밋된 읽기 스냅샷 격리
테이블을 만들 때 columnstore 인덱스 지정
AlwaysOn은 columnstore 인덱스 지원
Always On 읽기 가능한 보조는 읽기 전용 비클러스터형 columnstore 인덱스 지원
Always On 읽기 가능한 보조는 업데이트할 수 있는 columnstore 인덱스 지원
힙 또는 B-tree에 대한 읽기 전용 비클러스터형 columnstore 인덱스 1 1 1 1 1
힙 또는 B-tree에 대해 업데이트할 수 있는 비클러스터형 columnstore 인덱스
비클러스터형 columnstore 인덱스를 가진 힙 또는 B-tree에 사용할 수 있는 추가 B-tree 인덱스
업데이트할 수 있는 클러스터형 columnstore 인덱스
클러스터형 columnstore 인덱스에 대한 B-tree 인덱스
메모리 최적화 테이블에 대한 columnstore 인덱스
비클러스터형 columnstore 인덱스 정의는 필터링된 조건 사용을 지원
CREATE TABLEALTER TABLE의 columnstore 인덱스에 대한 압축 지연 옵션
Columnstore 인덱스에는 비지속형 계산 열이 있을 수 있음
튜플 이동기 백그라운드 병합 지원

1 읽기 전용 비클러스터형 columnstore 인덱스를 만들려면 읽기 전용 파일 그룹에 인덱스를 저장합니다.

참고

일괄 처리 모드 작업에 대한 DOP(병렬 처리 수준)는 SQL Server Standard Edition의 경우 2로 제한되고 SQL Server Web 및 Express Edition의 경우 1로 제한됩니다. 디스크 기반 테이블과 메모리 최적화 테이블에서 생성된 columnstore 인덱스가 해당합니다.

SQL Server 2019 (15.x)

SQL Server 2019 (15.x)에서는 이러한 새 기능을 추가합니다.

기능

  • SQL Server 2019 (15.x)부터는 내부 임계값에 따라 특정 시간 동안 존재하던 더 작은 OPEN 델타 행 그룹을 자동으로 압축하거나 다수의 행이 삭제된 위치에서 COMPRESSED 행 그룹을 병합하는 백그라운드 병합 작업이 튜플 이동기를 지원합니다. 이전에는 부분적으로 삭제된 데이터와 행 그룹을 병합하기 위해 인덱스를 다시 구성하는 작업이 필요했습니다. 이번 변경 덕분에 지속적으로 columnstore 인덱스 품질이 향상됩니다.

SQL Server 2017(14.x)

SQL Server 2017(14.x)에서는 이러한 새 기능을 추가합니다.

기능

  • SQL Server 2017(14.x)에서는 클러스터형 columnstore 인덱스에서 비지속형 계산 열을 지원합니다. 클러스터형 columnstore 인덱스에서는 지속형 계산 열이 지원되지 않습니다. 계산된 열이 있는 columnstore 인덱스에 비클러스터형 인덱스를 만들 수 없습니다.

SQL Server 2016(13.x)

SQL Server 2016(13.x) 는 columnstore 인덱스의 성능 및 유연성을 개선하기 위해 주요 향상 기능을 추가합니다. 이러한 향상된 기능을 통해 데이터 웨어하우징 시나리오가 향상되며 실시간 운영 분석이 가능합니다.

기능

  • Rowstore 테이블에는 업데이트할 수 있는 비클러스터형 columnstore 인덱스 한 개가 있을 수 있습니다. 이전에는 비클러스터형 columnstore 인덱스가 읽기 전용이었습니다.

  • 비클러스터형 columnstore 인덱스 정의는 필터링된 조건 사용을 지원합니다. OLTP 테이블에 columnstore 인덱스를 추가할 경우 성능에 미치는 영향을 최소화하려면 필터링된 조건을 사용하여 운영 워크로드의 콜드 데이터에 대해서만 비클러스터형 columnstore 인덱스를 만듭니다.

  • 메모리 내 테이블에는 columnstore 인덱스가 한 개만 있을 수 있습니다. 테이블을 만들 때 만들거나 나중에 ALTER TABLE(Transact-SQL)을 사용하여 추가할 수 있습니다. 이전에는 디스크 기반 테이블에만 columnstore 인덱스가 있을 수 있었습니다.

  • 클러스터형 columnstore 인덱스에 하나 이상의 비클러스터형 rowstore 인덱스가 있을 수 있습니다. 이전에 columnstore 인덱스는 비클러스터형 인덱스를 지원하지 않았습니다. SQL Server는 DML 작업에 대해 비클러스터형 인덱스를 자동으로 유지 관리합니다.

  • 기본 키 및 외래 키에 대해 B-tree 인덱스를 사용하여 클러스터형 columnstore 인덱스에 이러한 제약 조건의 적용을 지원합니다.

  • Columnstore 인덱스에는 트랜잭션 워크로드가 실시간 운영 분석에 미치는 영향을 최소화하는 압축 지연 옵션이 있습니다. 이 옵션을 사용하여 자주 변하는 행을 columnstore로 압축하기 전에 안정화할 수 있습니다. 자세한 내용은 실시간 운영 분석을 위해 CREATE COLUMNSTORE INDEX(Transact-SQL)Columnstore를 사용한 시작 참조하세요.

데이터베이스 호환성 수준 120 또는 130에 대한 성능

  • Columnstore 인덱스는 읽기 커밋된 스냅샷 격리 수준(RCSI) 및 스냅샷 격리(SI)를 지원합니다. 이를 통해 트랜잭션을 잠금이 없는 분석 쿼리와 일관성을 유지할 수 있습니다.

  • Columnstore는 인덱스를 명시적으로 다시 만들 필요 없이 삭제된 행을 제거하여 인덱스 조각 모음을 지원합니다. ALTER INDEX ... REORGANIZE 문은 내부에서 정의한 정책을 바탕으로 columnstore에서 온라인 작업으로 삭제된 행을 제거함

  • columnstore 인덱스는 Always On 읽기 가능한 보조 복제본에 대한 액세스일 수 있습니다. 분석 쿼리를 Always On 보조 복제본으로 분산하여 운영 분석의 성능을 개선할 수 있습니다.

  • 집계 푸시 다운은 데이터 형식이 8바이트 이하를 사용하고 문자열 데이터 형식이 아닌 경우 테이블 검색 중에 집계 함수 MIN, MAX, SUM, COUNTAVG를 계산합니다. 클러스터형 columnstore 인덱스 및 비클러스터형 columnstore 인덱스 모두에 대해 GROUP BY 절을 사용하거나 사용하지 않는 집계 푸시다운을 지원합니다. SQL Server에서 이 향상된 기능은 Enterprise Edition용으로 예약되어 있습니다.

  • 문자열 조건자 푸시다운은 VARCHAR/CHAR 또는 NVARCHAR/NCHAR 형식의 문자열을 비교하는 쿼리의 속도를 향상합니다. 이는 일반적인 비교 연산자에 적용되며 비트맵 필터를 사용하는 LIKE와 같은 연산자를 포함합니다. 또한 지원되는 모든 데이터 정렬에서 작동합니다. SQL Server에서 이 향상된 기능은 Enterprise Edition용으로 예약되어 있습니다.

  • 벡터 기반 하드웨어 기능을 활용하여 일괄 처리 모드 작업을 향상합니다. 데이터베이스 엔진은 AVX 2(고급 벡터 확장) 및 SSE 4(스트리밍 SIMD 확장 4) 하드웨어 확장에 대한 CPU 지원 수준을 검색하고, 지원되는 경우 이를 사용합니다. SQL Server에서 이 향상된 기능은 Enterprise Edition용으로 예약되어 있습니다.

데이터베이스 호환성 수준 130에 대한 성능

  • 다음 연산 중 하나 이상을 사용하는 쿼리에 대한 새 일괄 처리 모드 실행 지원:

    • SORT
    • 여러 가지 고유 함수를 사용하여 집계합니다. 몇 가지 예: COUNT/COUNT, AVG/SUM, CHECKSUM_AGG, STDEV/STDEVP
    • 창 집계 함수: COUNT, COUNT_BIG, SUM, AVG, MIN, MAX, CLR
    • 창 사용자 정의 집계: CHECKSUM_AGG, STDEV, STDEVP, VAR, VARP, GROUPING
    • 창 집계 분석 함수: LAG, LEAD, FIRST_VALUE, LAST_VALUE, PERCENTILE_CONT, PERCENTILE_DISC, CUME_DISTPERCENT_RANK
  • MAXDOP 1에서 실행되거나 직렬 쿼리 계획을 사용하는 단일 스레드 쿼리는 일괄 처리 모드에서 실행됩니다. 이전에는 다중 스레드 쿼리만이 일괄 처리 실행으로 실행되었습니다.

  • 메모리 최적화 테이블 쿼리는 rowstore 또는 columnstore 인덱스의 데이터에 액세스하는 경우 SQL InterOp 모드에서 병렬 계획을 포함할 수 있습니다.

지원 가능성

이러한 시스템 뷰는 columnstore의 새로운 특징임:

이러한 메모리 내 OLTP 기반 DMV는 columnstore에 대한 업데이트를 포함합니다.

제한 사항

  • 메모리 내 테이블의 경우 columnstore 인덱스는 모든 열을 포함해야 하며, columnstore 인덱스가 필터링된 조건을 가질 수 없습니다.
  • 메모리 내 테이블의 경우 columnstore 인덱스에 대한 쿼리는 InterOP 모드에서만 실행되며 메모리 내 고유 모드에서는 실행되지 않습니다. 병렬 실행은 지원됩니다.

SQL Server 2014(12.x)

SQL Server 2014(12.x)에서는 클러스터형 columnstore 인덱스를 기본 스토리지 형식으로 도입하였습니다. 이를 통해 일반 부하뿐만 아니라 업데이트, 삭제 및 삽입 작업도 사용할 수 있습니다.

  • 테이블에서 클러스터형 columnstore 인덱스를 기본 테이블 스토리지로 사용할 수 있습니다. 테이블에 다른 인덱스는 허용되지 않지만 클러스터형 columnstore 인덱스는 업데이트가 가능하므로 일반 부하를 수행하고 개별 행을 변경할 수 있습니다.
  • 비클러스터형 columnstore 인덱스는 이제 일괄 처리 모드로 실행될 수 있는 추가 연산자를 제외하고 SQL Server 2012(11.x)에서와 같은 기능을 계속 가지고 있습니다. 다시 만들기 및 파티션 전환의 사용을 제외하고 여전히 업데이트는 불가능합니다. 비클러스터형 columnstore 인덱스는 디스크 기반 테이블에 대해서만 지원되며 메모리 내 테이블에 대해서는 지원되지 않습니다.
  • 클러스터형 및 비클러스터형 columnstore 인덱스에는 데이터를 추가로 압축하는 보관 압축 옵션이 있습니다. 보관 옵션은 메모리와 디스크에서 모두 데이터 크기를 줄이는 데 유용하지만 쿼리 성능이 저하됩니다. 이는 자주 액세스하지 않는 데이터에 적합합니다.
  • 클러스터형 columnstore 인덱스 및 비클러스터형 columnstore 인덱스는 매우 유사하게 작동합니다. 즉, 같은 열 형식 스토리지 형식, 같은 쿼리 처리 엔진 및 같은 동적 관리 뷰 집합을 사용합니다. 차이점은 기본 인덱스 형식과 보조 인덱스 형식이며 비클러스터형 columnstore 인덱스는 읽기 전용입니다.
  • 이러한 연산자는 다중 스레드 쿼리, 즉 검색, 필터, 프로젝트, 조인, GROUP BY 및 UNION ALL에 대해 일괄 처리 모드에서 실행됩니다.

SQL Server 2012(11.x)

SQL Server 2012(11.x)는 columnstore 데이터에 대한 쿼리의 경우 rowstore 테이블 및 일괄 처리에 대한 또 다른 인덱스 형식으로 비클러스터형 columnstore 인덱스를 도입하였습니다.

  • Rowstore 테이블에는 비클러스터형 columnstore 인덱스 한 개가 있을 수 있습니다.
  • columnstore 인덱스는 읽기 전용입니다. Columnstore 인덱스를 만든 후에는 INSERT, DELETEUPDATE 작업에 의해 테이블을 업데이트할 수 없으며, 이러한 작업을 수행하려면 인덱스를 삭제하고 테이블을 업데이트한 다음 columnstore 인덱스를 다시 만들어야 합니다. 파티션 전환을 사용하여 추가 데이터를 테이블에 로드할 수 있습니다. 파티션 전환의 장점은 columnstore 인덱스를 삭제한 다음 다시 만들지 않고 데이터를 로드할 수 있다는 것입니다.
  • Columnstore 인덱스는 데이터의 복사본을 저장하기 때문에 이 인덱스를 사용하려면 언제나 추가 스토리지, 일반적으로 rowstore보다 10% 더 많은 스토리지가 필요합니다.
  • 일괄 처리는 2배 이상의 쿼리 성능을 제공하지만 병렬 쿼리 실행에만 사용할 수 있습니다.

참고 항목

Columnstore 인덱스 디자인 지침
Columnstore 인덱스 데이터 로드 지침
Columnstore 인덱스 쿼리 성능
실시간 운영 분석을 위한 Columnstore 시작
데이터 웨어하우스용 Columnstore 인덱스
인덱스 다시 구성 및 다시 작성