sys.dm_db_column_store_row_group_physical_stats(Transact-SQL)

적용 대상: SQL Server 2016(13.x) 이상 Azure SQL DatabaseAzure SQL Managed Instance

현재 데이터베이스의 모든 columnstore 인덱스에 대한 현재 행 그룹 수준 정보를 제공합니다.

이렇게 하면 카탈로그 뷰 sys.column_store_row_groups(Transact-SQL)가 확장됩니다.

열 이름 데이터 형식 설명
object_id int 기본 테이블의 ID입니다.
index_id int object_id 테이블에 있는 이 columnstore 인덱스의 ID입니다.
partition_number int row_group_id 보유하는 테이블 파티션의 ID입니다. partition_number 사용하여 이 DMV를 sys.partitions에 조인할 수 있습니다.
row_group_id int 이 행 그룹의 ID입니다. 분할된 테이블의 경우 파티션 내에서 값이 고유합니다.

메모리 내 꼬리의 경우 -1입니다.
delta_store_hobt_id bigint 델타 저장소의 행 그룹에 대한 hobt_id.

행 그룹이 델타 저장소에 없으면 NULL입니다.

메모리 내 테이블의 꼬리에 대한 NULL입니다.
state tinyint state_description 연결된 ID 번호입니다.

0 = 보이지 않는

1 = OPEN

2 = CLOSED

3 = COMPRESSED

4 = 삭제 표시

COMPRESSED는 메모리 내 테이블에 적용되는 유일한 상태입니다.
state_desc nvarchar(60) 행 그룹 상태에 대한 설명:

0 - INVISIBLE -빌드 중인 행 그룹입니다. 예:
데이터가 압축되는 동안 columnstore의 행 그룹은 INVISIBLE입니다. 압축이 완료되면 메타데이터 스위치가 columnstore 행 그룹의 상태를 INVISIBLE에서 COMPRESSED로 변경하고 deltastore 행 그룹의 상태가 CLOSED에서 TOMBSTONE으로 변경됩니다.

1 - OPEN - 새 행을 허용하는 deltastore 행 그룹입니다. 열려 있는 행 그룹은 여전히 rowstore 형식이며 columnstore 형식으로 압축되지 않았습니다.

2 - CLOSED - 최대 행 수를 포함하고 튜플 이동기 프로세스가 columnstore로 압축되기를 기다리는 델타 저장소의 행 그룹입니다.

3 - COMPRESSED - columnstore 압축으로 압축되고 columnstore에 저장된 행 그룹입니다.

4 - TOMBSTONE - 이전에 deltastore에 있었고 더 이상 사용되지 않는 행 그룹입니다.
total_rows bigint 행 그룹에 물리적으로 저장된 행 수입니다. 압축된 행 그룹의 경우 삭제된 것으로 표시된 행을 포함합니다.
deleted_rows bigint 삭제로 표시된 압축된 행 그룹에 물리적으로 저장된 행 수입니다.

델타 저장소에 있는 행 그룹의 경우 0입니다.
size_in_bytes bigint 이 행 그룹에 있는 모든 페이지의 크기(바이트)를 결합했습니다. 이 크기에는 메타데이터 또는 공유 사전을 저장하는 데 필요한 크기가 포함되지 않습니다.
trim_reason tinyint COMPRESSED 행 그룹이 최대 행 수보다 작도록 트리거한 이유입니다.

0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION

1 - NO_TRIM

2 - BULKLOAD

3 - REORG

4 - DICTIONARY_SIZE

5 - MEMORY_LIMITATION

6 - RESIDUAL_ROW_GROUP

7 - STATS_MISMATCH

8 - 스필오버

9 - AUTO_MERGE
trim_reason_desc nvarchar(60) trim_reason 대한 설명입니다.

0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: 이전 버전의 SQL Server에서 업그레이드할 때 발생했습니다.

1 - NO_TRIM: 행 그룹이 잘리지 않았습니다. 행 그룹이 최대 1,048,576개 행으로 압축되었습니다. 델타 행 그룹을 닫은 후 행의 하위 집합이 삭제된 경우 행 수가 줄어들 수 있습니다.

2 - BULKLOAD: 대량 로드 일괄 처리 크기로 행 수가 제한되었습니다.

3 - REORG: REORG 명령의 일부로 강제 압축.

4 - DICTIONARY_SIZE: 사전 크기가 너무 커서 모든 행을 함께 압축할 수 없습니다.

5 - MEMORY_LIMITATION: 모든 행을 압축하는 데 사용할 수 있는 메모리가 부족합니다.

6 - RESIDUAL_ROW_GROUP: 인덱스 빌드 작업 중 행이 100만 개 < 인 마지막 행 그룹의 일부로 닫혔습니다. 참고: 코어가 여러 개 있는 파티션 빌드는 이 형식을 둘 이상 트리밍할 수 있습니다.

7 - STATS_MISMATCH: 메모리 내 테이블의 columnstore에만 해당합니다. 통계가 잘못 표시된 >경우 = 꼬리에 정규화된 행이 100만 개이지만 더 적은 것으로 확인되면 압축된 행 그룹에는 1백만 개의 행이 < 있습니다.

8 - SPILLOVER: 메모리 내 테이블의 columnstore에만 해당합니다. tail에 > 정규화된 행이 100만 개인 경우 마지막 일괄 처리 남은 행은 100k에서 100만 개 사이인 경우 압축됩니다.

9 - AUTO_MERGE: 백그라운드에서 실행되는 튜플 Mover 병합 작업이 하나 이상의 행 그룹을 이 행 그룹으로 통합했습니다.
transition_to_compressed_state tinyint 이 행 그룹이 deltastore에서 columnstore의 압축된 상태로 이동된 방법을 보여 줍니다.

1- NOT_APPLICABLE

2 - INDEX_BUILD

3 - TUPLE_MOVER

4 - REORG_NORMAL

5 - REORG_FORCED

6 - BULKLOAD

7 - MERGE
transition_to_compressed_state_desc nvarchar(60) 1 - NOT_APPLICABLE - 작업이 deltastore에 적용되지 않습니다. 또는 SQL Server 2016(13.x)로 업그레이드하기 전에 행 그룹이 압축되어 기록이 유지되지 않습니다.

2 - INDEX_BUILD - 인덱스 만들기 또는 인덱스 다시 작성이 행 그룹을 압축했습니다.

3 - TUPLE_MOVER - 백그라운드에서 실행되는 튜플 이동기가 행 그룹을 압축했습니다. 튜플 이동기는 행 그룹이 상태를 OPEN에서 CLOSED로 변경한 후에 발생합니다.

4 - REORG_NORMAL - 재구성 작업, ALTER INDEX ... REORG에서 CLOSED 행 그룹을 deltastore에서 columnstore로 이동했습니다. 이는 튜플 이동기가 행 그룹을 이동할 시간이 생기기 전에 발생했습니다.

5 - REORG_FORCED - 이 행 그룹은 deltastore에서 열렸으며 전체 행이 있기 전에 columnstore에 강제로 들어갔습니다.

6 - BULKLOAD - 대량 로드 작업은 deltastore를 사용하지 않고 행 그룹을 직접 압축했습니다.

7 - MERGE - 병합 작업은 하나 이상의 행 그룹을 이 행 그룹에 통합한 다음 columnstore 압축을 수행했습니다.
has_vertipaq_optimization bit VertiPaq 최적화는 더 높은 압축을 달성하기 위해 행 그룹의 행 순서를 다시 정렬하여 columnstore 압축을 향상시킵니다. 대부분의 경우 이 최적화가 자동으로 수행됩니다. VertiPaq 최적화가 사용되지 않는 두 가지 경우가 있습니다.
a. 델타 행 그룹이 columnstore로 이동하고 columnstore 인덱스에 하나 이상의 비클러스터형 인덱스가 있는 경우- 이 경우 VertiPaq 최적화를 건너뛰어 매핑 인덱스의 변경 내용을 최소화합니다.
b. 메모리 최적화 테이블의 columnstore 인덱스에 대한

0 = 아니요

1 = 예
세대 bigint 이 행 그룹과 연결된 행 그룹 생성입니다.
created_time datetime2 이 행 그룹을 만든 시점의 시계 시간입니다.

NULL - 메모리 내 테이블의 columnstore 인덱스입니다.
closed_time datetime2 이 행 그룹이 닫힌 시점의 시계 시간입니다.

NULL - 메모리 내 테이블의 columnstore 인덱스입니다.

결과

현재 데이터베이스의 각 행 그룹에 대해 하나의 행을 반환합니다.

사용 권한

CONTROL 테이블에 대한 사용 권한 및 VIEW DATABASE STATE 데이터베이스에 대한 권한이 필요합니다.

SQL Server 2022 이상에 대한 권한

데이터베이스에 대한 VIEW DATABASE PERFORMANCE STATE 권한이 필요합니다.

A. columnstore 인덱스 다시 구성 또는 다시 작성 시기를 결정하는 조각화를 계산합니다.

columnstore 인덱스의 경우 삭제된 행의 백분율은 행 그룹의 조각화에 적합한 측정값입니다. 조각화가 20% 이상인 경우 삭제된 행을 제거합니다. 자세한 예제는 인덱스 다시 구성 및 다시 작성을 참조 하세요.

이 예제에서는 sys.dm_db_column_store_row_group_physical_stats 다른 시스템 테이블과 조인한 다음 열을 현재 데이터베이스의 각 행 그룹의 효율성에 대한 추정값으로 계산 Fragmentation 합니다. 단일 테이블에 대한 정보를 찾으려면 WHERE 절 앞에 있는 주석 하이픈을 제거하고 테이블 이름을 제공합니다.

SELECT i.object_id,   
    object_name(i.object_id) AS TableName,   
    i.name AS IndexName,   
    i.index_id,   
    i.type_desc,   
    CSRowGroups.*,  
    100*(ISNULL(deleted_rows,0))/NULLIF(total_rows,0) AS 'Fragmentation'
FROM sys.indexes AS i  
JOIN sys.dm_db_column_store_row_group_physical_stats AS CSRowGroups  
    ON i.object_id = CSRowGroups.object_id AND i.index_id = CSRowGroups.index_id   
-- WHERE object_name(i.object_id) = 'table_name'   
ORDER BY object_name(i.object_id), i.name, row_group_id;  

참고 항목

개체 카탈로그 뷰(Transact-SQL)
카탈로그 뷰(Transact-SQL)
Columnstore 인덱스 아키텍처
SQL Server 시스템 카탈로그 쿼리 FAQ
sys.columns(Transact-SQL)
sys.all_columns(Transact-SQL)
sys.computed_columns(Transact-SQL)
sys.column_store_dictionaries(Transact-SQL)
sys.column_store_segments(Transact-SQL)