columnstore 인덱스의 새로운 기능
적용 대상: Microsoft Fabric의 SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) SQL 데이터베이스
각 버전의 SQL Server에 사용할 수 있는 columnstore 기능과 SQL Database, Azure Synapse Analytics, Analytics Platform System(PDW)의 최신 릴리스를 알아봅니다.
제품 릴리스에 대한 기능 요약
이 표에는 columnstore 인덱스 및 사용할 수 있는 제품에 대한 주요 기능이 요약되어 있습니다.
Columnstore 인덱스 기능 | SQL Server 2012(11.x) | SQL Server 2014(12.x) | SQL Server 2016(13.x)1 | SQL Server 2017(14.x) | SQL Server 2019 (15.x) | SQL Server 2022(16.x) | SQL Database1 | Azure Synapse Analytics 전용 SQL 풀 |
---|---|---|---|---|---|---|---|---|
다중 스레드 쿼리에 대한 일괄 처리 모드 실행2 | 예 | 예 | 예 | 예 | 예 | 예 | 예 | 예 |
단일 스레드 쿼리에 대한 일괄 처리 모드 실행 | 예 | 예 | 예 | 예 | 예 | 예 | ||
보관 압축 옵션 | 예 | 예 | 예 | 예 | 예 | 예 | 예 | |
스냅샷 격리 및 읽기 커밋된 스냅샷 격리 | 예 | 예 | 예 | 예 | 예 | 예 | ||
테이블을 만들 때 columnstore 인덱스 지정 | 예 | 예 | 예 | 예 | 예 | 예 | ||
Always On에서 columnstore 인덱스 지원 | 예 | 예 | 예 | 예 | 예 | 예 | 예 | 예 |
Always On 읽기 가능 보조는 읽기 전용 비클러스터형 columnstore 인덱스를 지원 | 예 | 예 | 예 | 예 | 예 | 예 | 예 | 예 |
Always On 읽기 가능한 보조는 업데이트할 수 있는 columnstore 인덱스 지원 | 예 | 예 | 예 | 예 | ||||
힙 또는 B-tree에 대한 읽기 전용 비클러스터형 columnstore 인덱스 | 예 | 예 | yes 3 | yes 3 | yes 3 | yes 3 | yes 3 | yes 3 |
힙 또는 B-트리에 대한 업데이트 가능한 비클러스터형 columnstore 인덱스 | 예 | 예 | 예 | 예 | 예 | 예 | ||
비클러스터형 columnstore 인덱스를 가진 힙 또는 B-트리에 사용할 수 있는 추가 B-트리 인덱스 | 예 | 예 | 예 | 예 | 예 | 예 | 예 | 예 |
업데이트할 수 있는 클러스터형 columnstore 인덱스 | 예 | 예 | 예 | 예 | 예 | 예 | 예 | |
클러스터형 columnstore 인덱스의 B-트리 인덱스 | 예 | 예 | 예 | 예 | 예 | 예 | ||
메모리 최적화 테이블의 columnstore 인덱스 | 예 | 예 | 예 | 예 | 예 | 예 | ||
비클러스터형 columnstore 인덱스 정의는 필터링된 조건 사용을 지원 | 예 | 예 | 예 | 예 | 예 | 예 | ||
CREATE TABLE 및 ALTER TABLE 의 columnstore 인덱스에 대한 압축 지연 옵션 |
예 | 예 | 예 | 예 | 예 | 예 | ||
nvarchar(max) 형식 지원 | 예 | 예 | 예 | 예 | 아니요 4 | |||
Columnstore 인덱스에는 비지속형 계산 열이 있을 수 있음 | 예 | 예 | 예 | |||||
튜플 이동기 백그라운드 병합 지원 | 예 | 예 | 예 | 예 | ||||
순서가 지정된 클러스터형 columnstore 인덱스 | 예 | 예 | 예 | |||||
순서가 지정된 비클러스터형 columnstore 인덱스 | 예 |
1 SQL Database의 경우 columnstore 인덱스는 Azure SQL 데이터베이스 DTU 프리미엄 계층, DTU 표준 계층 - S3 이상 및 모든 vCore 계층에서 사용할 수 있습니다. SQL Server 2016(13.x) SP1 이상 버전의 경우 columnstore 인덱스는 모든 버전에서 사용할 수 있습니다. SQL Server 2016(13.x)(SP1 이전) 및 이전 버전의 경우 columnstore 인덱스는 Enterprise Edition에서만 사용할 수 있습니다.
2 일괄 처리 모드 작업에 대한 DOP(병렬 처리 수준)는 SQL Server Standard Edition의 경우 2로 제한되고 SQL Server Web 및 Express Edition의 경우 1로 제한됩니다. 이 제한은 디스크 기반 테이블과 메모리 최적화 테이블에서 생성된 columnstore 인덱스가 해당됩니다.
3 읽기 전용 비클러스터형 columnstore 인덱스를 만들려면 읽기 전용 파일 그룹에 인덱스를 저장합니다.
4 전용 SQL 풀에서는 지원되지 않지만 서버리스 SQL 풀에서 지원됩니다.
SQL Server 2022(16.x)
SQL Server 2022(16.x)는 이러한 기능을 추가했습니다.
순서가 지정된 클러스터형 columnstore 인덱스는 순서가 지정된 열 조건자를 기반으로 쿼리의 성능을 향상시킵니다. 순서가 지정된 columnstore 인덱스는 데이터 세그먼트를 모두 건너뛰어 성능을 향상시킬 수 있습니다. 이렇게 하면 columnstore 데이터에 대한 쿼리를 완료하는 데 필요한 IO를 크게 줄일 수 있습니다. 자세한 내용은 세그먼트 제거를 참조하세요. 정렬된 클러스터형 columnstore 인덱스는 SQL Server 2022(16.x)에서 사용할 수 있습니다. 자세한 내용은 정렬된 클러스터형 columnstore 인덱스를 사용하여 CREATE COLUMNSTORE INDEX 및 성능 튜닝을 참조하세요.
문자열의 클러스터형 columnstore 행 그룹 제거를 사용하는 조건자 푸시다운은 경계 값을 사용하여 문자열 검색을 최적화합니다. 모든 columnstore 인덱스는 데이터 형식별로 향상된 세그먼트 제거의 이점을 누릴 수 있습니다. SQL Server 2022(16.x)부터 세그먼트 제거 기능은 문자열, 이진, guid 데이터 형식 및 2보다 큰 배율에 대한 datetimeoffset 데이터 형식으로 확장됩니다. 이전에는 columnstore 세그먼트 제거가 숫자, 날짜 및 시간 데이터 형식과 배율이 2보다 작거나 같은 datetimeoffset 데이터 형식에만 적용되었습니다. 문자열 최소/최대 세그먼트 제거(SQL Server 2022(16.x) 이상 버전)를 지원하는 SQL Server 버전으로 업그레이드한 후에는 REBUILD 또는 DROP/CREATE를 사용하여 다시 작성될 때까지 columnstore 인덱스가 이 기능에 도움이 되지 않습니다.
추가된 기능에 대한 자세한 내용은 SQL Server 2022의 새로운 기능을 참조하세요.
SQL Server 2019 (15.x)
SQL Server 2019(15.x)는 다음과 같은 새로운 기능을 추가합니다.
기능적
SQL Server 2019(15.x)부터는 내부 임계값에 따라 특정 시간 동안 존재하던 더 작은 열린 델타 행 그룹을 자동으로 압축하거나 다수의 행이 삭제된 곳에서 압축된 행 그룹을 병합하는 백그라운드 병합 작업이 튜플 이동기를 지원합니다. 이전에는 행 그룹을 부분적으로 삭제된 데이터와 병합하기 위해 인덱스 재구성 작업이 필요했습니다. 그러면 시간이 지남에 따라 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-트리 인덱스를 사용하여 클러스터형 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
,COUNT
,AVG
를 계산합니다. 집계 푸시다운은 클러스터형 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_DIST
,PERCENT_RANK
MAXDOP 1
에서 실행되거나 직렬 쿼리 계획을 사용하는 단일 스레드 쿼리는 일괄 처리 모드에서 실행됩니다. 이전에는 일괄 처리 실행으로 다중 스레드 쿼리만 실행했습니다.메모리 최적화 테이블 쿼리는 rowstore 또는 columnstore 인덱스의 데이터에 액세스하는 경우 SQL InterOp에 병렬 계획을 가질 수 있습니다.
지원 가능성
이러한 시스템 보기는 columnstore의 새로운 기능입니다.
이러한 메모리 내 OLTP 기반 DMV는 columnstore에 대한 업데이트를 포함합니다.
제한 사항
- 메모리 내 테이블의 경우 columnstore 인덱스에는 모든 열이 포함되어야 합니다. columnstore 인덱스가 필터링된 조건을 가질 수 없습니다.
- 메모리 내 테이블의 경우 columnstore 인덱스에 대한 쿼리는 메모리 내 기본 모드가 아닌 InterOP 모드에서만 실행됩니다. 병렬 실행이 지원됩니다.
알려진 문제
적용 대상: SQL Server, Azure SQL 데이터베이스, Azure SQL Managed Instance, Azure Synapse Analytics 전용 SQL 풀
- 현재 압축된 columnstore 세그먼트의 LOB 열(varbinary(max), varchar(max), nvarchar(max))은 DBCC SHRINKDATABASE 및 DBCC SHRINKFILE의 영향을 받지 않습니다.
SQL Server 2014(12.x)
SQL Server 2014(12.x)에서는 클러스터형 columnstore 인덱스를 기본 스토리지 형식으로 도입하였습니다. 이를 통해 일반 로드뿐만 아니라 업데이트, 삭제 및 삽입 작업이 허용되었습니다.
- 테이블에서 클러스터형 columnstore 인덱스를 기본 테이블 스토리지로 사용할 수 있습니다. 테이블에는 다른 인덱스가 허용되지 않지만 클러스터형 columnstore 인덱스를 업데이트할 수 있으므로 일반 로드를 수행하고 개별 행을 변경할 수 있습니다.
- 비클러스터형 columnstore 인덱스도 이제 일괄 처리 모드에서 실행할 수 있는 추가 연산자를 제외하고 SQL Server 2012(11.x)와 동일한 기능을 계속 사용합니다. 다시 만들기 및 파티션 전환의 사용을 제외하고 여전히 업데이트는 불가능합니다. 비클러스터형 columnstore 인덱스는 메모리 내 테이블이 아닌 디스크 기반 테이블에서만 지원됩니다.
- 클러스터형 및 비클러스터형 columnstore 인덱스에는 데이터를 추가로 압축하는 보관 압축 옵션이 있습니다. 보관 옵션은 메모리와 디스크에서 모두 데이터 크기를 줄이는 데 유용하지만 쿼리 성능이 저하됩니다. 이는 자주 액세스하지 않는 데이터에 적합합니다.
- 클러스터형 columnstore 인덱스 및 비클러스터형 columnstore 인덱스는 매우 유사하게 작동합니다. 즉, 같은 열 형식 스토리지 형식, 같은 쿼리 처리 엔진 및 같은 동적 관리 뷰 집합을 사용합니다. 차이점은 기본 인덱스 형식과 보조 인덱스 형식이며 비클러스터형 columnstore 인덱스는 읽기 전용입니다.
- 이러한 연산자는 검사, 필터, 프로젝트, 조인, 그룹화 기준, 합집합 모두 다중 스레드 쿼리에 대해 일괄 처리 모드로 실행됩니다.
SQL Server 2012(11.x)
SQL Server 2012(11.x)는 비클러스터형 columnstore 인덱스를 rowstore 테이블의 다른 인덱스 형식으로 도입하고 columnstore 데이터에 대한 쿼리의 일괄 처리를 도입했습니다.
- Rowstore 테이블에는 비클러스터형 columnstore 인덱스 한 개가 있을 수 있습니다.
- columnstore 인덱스는 읽기 전용입니다. Columnstore 인덱스를 만든 후에는
INSERT
,DELETE
,UPDATE
작업에 의해 테이블을 업데이트할 수 없으며, 이러한 작업을 수행하려면 인덱스를 삭제하고 테이블을 업데이트한 다음 columnstore 인덱스를 다시 만들어야 합니다. 파티션 전환을 사용하여 테이블에 추가 데이터를 로드할 수 있습니다. 파티션 전환의 장점은 columnstore 인덱스 삭제 및 다시 작성 없이 데이터를 로드할 수 있다는 것입니다. - columnstore 인덱스는 데이터의 복사본을 저장하기 때문에 항상 추가 스토리지가 필요하며, 일반적으로 rowstore보다 10% 더 필요합니다.
- 일괄 처리는 2배 이상 더 좋은 쿼리 성능을 제공하지만 병렬 쿼리 실행에 대해서만 사용할 수 있습니다.