sys.column_store_segments(Transact-SQL)

적용 대상: SQL Server 2012(11.x) 이상 Azure SQL Managed Instance

columnstore 인덱스 내 각 열 세그먼트에 대해 하나의 행을 반환합니다. 행 그룹당 열당 하나의 열 세그먼트가 있습니다. 예를 들어 행 그룹이 10개이고 열이 34개인 테이블은 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을 사용하지 않는 경우 크기는 -1로 설정됩니다.
primary_dictionary_id int 값 0은 전역 사전을 나타냅니다. 값 -1은 이 열에 대해 만든 전역 사전이 없음을 나타냅니다.
secondary_dictionary_id int 0이 아닌 값은 현재 세그먼트(예: 행 그룹)에서 이 열의 로컬 사전을 가리킵니다. 값 -1은 이 세그먼트에 대한 로컬 사전이 없음을 나타냅니다.
min_data_id bigint 열 세그먼트의 최소 데이터 ID입니다.
max_data_id bigint 열 세그먼트의 최대 데이터 ID입니다.
null_value bigint null을 나타내는 데 사용되는 값입니다.
on_disk_size bigint 세그먼트 크기(바이트)입니다.
collation_id int SQL Server 2022(16.x) 이상에 적용됩니다.
세그먼트를 만들 때의 현재 데이터 정렬입니다. 내부 ID로 지도. 현재 내부 전용이며 개발용이 아닙니다.
min_deep_data varbinary(18) SQL Server 2022(16.x) 이상에 적용됩니다.
세그먼트 제거에 사용됩니다.1 내부용으로만 사용됩니다.
max_deep_data varbinary(18) SQL Server 2022(16.x) 이상에 적용됩니다.
세그먼트 제거에 사용됩니다.1 내부용으로만 사용됩니다.

1 문자열 최소/최대 세그먼트 제거(SQL Server 2022(16.x) 이상) min_deep_datamax_deep_data 를 지원하는 SQL Server 버전으로 업그레이드한 후 REBUILD 또는 DROP/CREATE를 사용하여 columnstore 인덱스가 다시 작성될 NULL 때까지 진행됩니다. 다시 빌드한 후 문자열 최소/최대 세그먼트 제거를 활용할 수 있는 데이터 형식이 포함된 세그먼트에는 데이터가 포함됩니다.

설명

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

Columnstore 세그먼트 제거는 숫자, 날짜 및 시간 데이터 형식 및 크기가 2보다 작거나 같은 datetimeoffset 데이터 형식에 적용됩니다. SQL Server 2022(16.x)부터 세그먼트 제거 기능은 문자열, 이진, guid 데이터 형식 및 2보다 큰 배율에 대한 datetimeoffset 데이터 형식으로 확장됩니다. 세그먼트 제거는 (max) 데이터 형식 길이와 같은 LOB 데이터 형식에는 적용되지 않습니다.

사용 권한

모든 열에는 테이블에 대한 최소 VIEW DEFINITION 권한이 필요합니다. 사용자에게 권한이 magnitudenull_valuebase_idmax_data_idhas_nullsmin_data_id없는 경우 다음 열이 SELECT 반환 NULL 됩니다.

카탈로그 뷰에서 메타데이터의 표시 유형은 사용자가 소유하거나 사용자에게 일부 권한이 부여된 보안 개체로 제한됩니다. 자세한 내용은 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 ;
GO

다음 단계