Applies to: SQL Server 2016 (13.x) and later
Azure SQL Database
Azure SQL Managed Instance
현재 데이터베이스의 모든 columnstore 인덱스에 대한 현재 행 그룹 수준 정보를 제공합니다.
This DMV extends the catalog view sys.column_store_row_groups.
Column name | Data type | Description |
---|---|---|
object_id |
int | 기본 테이블의 ID입니다. |
index_id |
int | 테이블에 있는 이 columnstore 인덱스의 object_id ID입니다. |
partition_number |
int | 보유하는 테이블 파티션의 ID입니다 row_group_id . partition_number 사용하여 이 DMV를 조인할 수 있습니다. sys.partitions |
row_group_id |
int | 이 행 그룹의 ID입니다. 분할된 테이블의 경우 파티션 내에서 값이 고유합니다.-1 메모리 내 꼬리의 경우 |
delta_store_hobt_id |
bigint | 델타 저장소의 행 그룹에 대한 hobt_id.NULL 행 그룹이 델타 저장소에 없는 경우 |
state |
tinyint | 연결된 ID 번호입니다 state_description .0 = INVISIBLE 1 = OPEN 2 = CLOSED 3 = COMPRESSED 4 = TOMBSTONE COMPRESSED 는 메모리 내 테이블에 적용되는 유일한 상태입니다. |
state_desc |
nvarchar(60) | 행 그룹 상태에 대한 설명:0
-
INVISIBLE - 빌드 중인 행 그룹입니다. For example: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 델타 저장소에 있는 행 그룹의 경우비클러스터형 columnstore 인덱스의 경우 이 값은 삭제 버퍼에 저장된 삭제된 행을 포함하지 않습니다. For more information, and to find the number of deleted rows in the delete buffer, see sys.internal_partitions. |
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 - SPILLOVER 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만 개 < 인 마지막 행 그룹의 일부로 닫혔습니다.Note: A partition build with multiple cores can result in more than one trim of this type. 7
-
STATS_MISMATCH : 메모리 내 테이블의 columnstore에만 해당합니다. 통계가 잘못 표시된 >경우 = 꼬리에 정규화된 행이 100만 개이지만 더 적은 것으로 확인되면 압축된 행 그룹에는 1백만 개의 행이 < 있습니다.8
-
SPILLOVER : 메모리 내 테이블의 columnstore에만 해당합니다. tail에 > 정규화된 행이 100만 개인 경우 마지막 일괄 처리 남은 행은 수가 100,000에서 1백만 사이인 경우 압축됩니다.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 , 행 그룹을 deltastore에서 columnstore로 이동했습니다 CLOSED . 이는 튜플 이동기가 행 그룹을 이동할 시간이 생기기 전에 발생했습니다.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 = 예 |
generation |
bigint | 이 행 그룹과 연결된 행 그룹 생성입니다. |
created_time |
datetime2 | 이 행 그룹을 만든 시점의 시계 시간입니다.NULL - 메모리 내 테이블의 columnstore 인덱스입니다. |
closed_time |
datetime2 | 이 행 그룹이 닫힌 시점의 시계 시간입니다.NULL - 메모리 내 테이블의 columnstore 인덱스입니다. |
Results
현재 데이터베이스의 각 행 그룹에 대해 하나의 행을 반환합니다.
Permissions
CONTROL
테이블에 대한 사용 권한 및 VIEW DATABASE STATE
데이터베이스에 대한 권한이 필요합니다.
SQL Server 2022 이상에 대한 사용 권한
데이터베이스에 대한 VIEW DATABASE PERFORMANCE STATE
권한이 필요합니다.
Examples
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
INNER 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;