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_data
max_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
권한이 필요합니다. 사용자에게 권한이 magnitude
null_value
base_id
max_data_id
has_nulls
min_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