sys.column_store_segments(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric의 SQL 데이터베이스

columnstore 인덱스 내 각 열 세그먼트에 대해 하나의 행을 반환합니다. 행 그룹당 열당 하나의 열 세그먼트가 있습니다. 예를 들어 10개의 행 그룹과 34개의 열이 있는 columnstore 인덱스에는 이 보기에 340개의 행이 있습니다.

열 이름 데이터 형식 설명
partition_id bigint 파티션 ID를 나타냅니다. 데이터베이스 내에서 고유합니다.
hobt_id bigint 이 columnstore 인덱스가 있는 테이블의 힙 또는 B-트리 인덱스(HoBT)의 ID입니다.
column_id int columnstore 열의 ID입니다.
segment_id int 행 그룹의 ID입니다. 이전 버전과의 호환성을 위해 열 이름은 행 그룹 ID인 경우에도 segment_id 계속 호출됩니다. 를 사용하여 <hobt_id, partition_id, column_id, segment_id>세그먼트를 고유하게 식별할 수 있습니다.
version int 열 세그먼트 형식의 버전입니다.
encoding_type int 해당 세그먼트에 사용되는 인코딩 유형:

1 = VALUE_BASED - 사전이 없는 비 문자열/이진(일부 내부 변형이 있는 4와 유사)

2 = VALUE_HASH_BASED - 사전에서 공통 값이 있는 문자열이 아닌/이진 열

3 = STRING_HASH_BASED - 사전에서 공통 값이 있는 문자열/이진 열

4 = STORE_BY_VALUE_BASED - 사전이 없는 비 문자열/이진

5 = STRING_STORE_BY_VALUE_BASED - 사전이 없는 문자열/이진

자세한 내용은 설명 섹션을 참조하세요.
row_count int 행 그룹의 행 수입니다.
has_nulls int 열 세그먼트에 NULL이 있으면 1입니다.
base_id bigint 인코딩 형식 1을 사용하는 경우 기본 값 ID입니다. 인코딩 형식 1이 사용되지 base_id 않는 경우 -1로 설정됩니다.
magnitude float 인코딩 형식 1이 사용되는 경우 크기입니다. 인코딩 형식 1이 사용되지 magnitude 않는 경우 -1로 설정됩니다.
primary_dictionary_id int 값 0은 전역 사전을 나타냅니다. 값 -1은 이 열에 대해 만든 전역 사전이 없음을 나타냅니다.
secondary_dictionary_id int 0이 아닌 값은 현재 세그먼트(예: 행 그룹)에서 이 열의 로컬 사전을 가리킵니다. 값 -1은 이 세그먼트에 대한 로컬 사전이 없음을 나타냅니다.
min_data_id bigint 내부 전용입니다.
max_data_id bigint 내부 전용입니다.
null_value bigint null을 나타내는 데 사용되는 값입니다.
on_disk_size bigint 세그먼트 크기(바이트)입니다.
collation_id int 세그먼트를 만들 때의 현재 데이터 정렬입니다. 내부 ID에 매핑됩니다. 내부 전용입니다.

적용 대상: SQL Server 2022(16.x) 이상 버전, Azure SQL Database 및 Azure SQL Managed Instance
min_deep_data varbinary(18) 세그먼트 제거에 사용됩니다.1 내부용으로만 사용됩니다.

적용 대상: SQL Server 2022(16.x) 이상 버전, Azure SQL Database 및 Azure SQL Managed Instance
max_deep_data varbinary(18) 세그먼트 제거에 사용됩니다.1 내부용으로만 사용됩니다.

적용 대상: SQL Server 2022(16.x) 이상 버전, Azure SQL Database 및 Azure SQL Managed Instance

1 확장된 데이터 형식 집합(SQL Server 2022(16.x)에서 도입됨)min_deep_datamax_deep_dataNULL 에 대해 최소/최대 세그먼트 제거를 지원하는 데이터베이스 엔진 버전으로 업그레이드한 후 columnstore 인덱스가 또는 ALTER INDEX ... REBUILD 문을 사용하여 CREATE INDEX ... WITH (DROP_EXISTING = ON) 다시 작성될 때까지 해당합니다.

설명

columnstore 세그먼트 인코딩 형식은 가장 낮은 스토리지 비용을 달성하기 위해 세그먼트 데이터를 분석하여 데이터베이스 엔진에서 선택합니다. 데이터가 대부분 고유한 경우 데이터베이스 엔진 값 기반 인코딩을 사용합니다. 데이터가 대부분 고유하지 않은 경우 데이터베이스 엔진 해시 기반 인코딩을 사용합니다. 문자열 기반 인코딩과 값 기반 인코딩 중에서 선택하는 것은 문자열 데이터 또는 이진 데이터와 관계없이 저장되는 데이터 형식과 관련이 있습니다. 가능한 경우 모든 인코딩은 비트 압축 및 실행 길이 인코딩을 활용합니다.

Columnstore 세그먼트 제거는 숫자, 날짜 및 시간 데이터 형식 및 크기가 2보다 작거나 같은 datetimeoffset 데이터 형식에 적용됩니다. SQL Server 2022(16.x)부터 세그먼트 제거 기능은 문자열 및 이진 데이터 형식, uniqueidentifier 데이터 형식 및 2보다 큰 배율에 대한 datetimeoffset 데이터 형식으로 확장됩니다. 세그먼트 제거는 varchar(max), nvarchar(max)varbinary(max)와 같은 LOB 데이터 형식에는 적용되지 않습니다. 더 많은 정보를 보려면 columnstore 인덱스의 새로운 기능을 참조하십시오.

사용 권한

VIEW DEFINITION 보기에 대한 권한이 필요합니다. 사용자에게 NULL 권한이 SELECThas_nullsbase_idmagnitudemin_data_idmax_data_id없는 경우 다음 열이 반환 null_value 됩니다.

사용자가 소유하고 있거나 사용 권한을 부여 받은 보안 개체에 대해서만 카탈로그 뷰의 메타데이터를 볼 수 있습니다. 자세한 내용은 Metadata Visibility Configuration을 참조하세요.

예제

다음 쿼리는 columnstore 인덱스의 세그먼트에 대한 정보를 반환합니다.

SELECT i.name, p.object_id, p.index_id, i.type_desc,
    COUNT(*) AS number_of_segments
FROM sys.column_store_segments AS s
INNER JOIN sys.partitions AS p
    ON s.hobt_id = p.hobt_id
INNER JOIN sys.indexes AS i
    ON p.object_id = i.object_id
WHERE i.type = 5 OR i.type = 6
GROUP BY i.name, p.object_id, p.index_id, i.type_desc;