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)
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기