sys.pdw_nodes_column_store_row_groups(Transact-SQL)

적용 대상:Azure Synapse Analytics AnalyticsPlatform System(PDW)

관리자가 Azure Synapse Analytics에서 시스템 관리 결정을 내릴 수 있도록 세그먼트별로 클러스터형 columnstore 인덱스 정보를 제공합니다. sys.pdw_nodes_column_store_row_groups 물리적으로 저장된 총 행 수(삭제된 것으로 표시된 행 포함)에 대한 열과 삭제된 것으로 표시된 행 수에 대한 열이 있습니다. sys.pdw_nodes_column_store_row_groups 사용하여 삭제된 행의 비율이 높고 다시 작성해야 하는 행 그룹을 결정합니다.

열 이름 데이터 형식 설명
object_id int 기본 테이블의 ID입니다. Control 노드의 논리 테이블에 대한 object_id 아니라 컴퓨팅 노드의 실제 테이블입니다. 예를 들어 object_id sys.tables의 object_id 일치하지 않습니다.

sys.tables와 조인하려면 sys.pdw_index_mappings 사용합니다.
index_id int object_id 테이블에 있는 클러스터형 columnstore 인덱스의 ID입니다.
partition_number int 행 그룹 row_group_id 보유하는 테이블 파티션의 ID입니다. partition_number 사용하여 이 DMV를 sys.partitions에 조인할 수 있습니다.
row_group_id int 이 행 그룹의 ID입니다. 파티션 내에서 고유합니다.
dellta_store_hobt_id bigint 델타 행 그룹에 대한 hobt_id, 행 그룹 형식이 델타가 아닌 경우 NULL입니다. 델타 행 그룹이란 새 레코드를 수락하는 읽기/쓰기 행 그룹입니다. 델타 행 그룹에 는 OPEN 상태가 있습니다. 델타 행 그룹은 여전히 rowstore 형식이며 columnstore 형식으로 압축되지 않았습니다.
state tinyint state_description 연결된 ID 번호입니다.

1 = OPEN

2 = CLOSED

3 = COMPRESSED
state_desccription nvarchar(60) 행 그룹의 영구 상태 설명:

OPEN - 새 레코드를 허용하는 읽기/쓰기 행 그룹입니다. 열려 있는 행 그룹은 여전히 rowstore 형식이며 columnstore 형식으로 압축되지 않았습니다.

CLOSED - 튜플 이동기 프로세스에 의해 채워졌지만 아직 압축되지 않은 행 그룹입니다.

COMPRESSED - 채워지고 압축된 행 그룹입니다.
total_rows bigint 행 그룹에 물리적으로 저장된 총 행입니다. 일부는 삭제되었을 수 있지만 여전히 저장됩니다. 행 그룹의 최대 행 수는 1,048,576개(16진수 FFFFF)입니다.
deleted_rows bigint 삭제로 표시된 행 그룹에 물리적으로 저장된 행 수입니다.

DELTA 행 그룹의 경우 항상 0입니다.
size_in_bytes int 이 행 그룹에 있는 모든 페이지의 크기(바이트)를 결합했습니다. 이 크기에는 메타데이터 또는 공유 사전을 저장하는 데 필요한 크기가 포함되지 않습니다.
pdw_node_id int Azure Synapse Analytics 노드의 고유 ID입니다.
distribution_id int 배포의 고유 ID입니다.

설명

클러스터형 또는 비클러스터형 columnstore 인덱스가 있는 각 테이블에 대해 각 columnstore 행 그룹에 대해 하나의 행을 반환합니다.

sys.pdw_nodes_column_store_row_groups 사용하여 행 그룹에 포함된 행 수와 행 그룹의 크기를 확인합니다.

행 그룹의 삭제된 행 수가 전체 행의 큰 비율로 증가하면 테이블의 효율성이 떨어집니다. columnstore 인덱스 다시 작성하여 테이블 크기를 줄여 테이블을 읽는 데 필요한 디스크 I/O를 줄입니다. columnstore 인덱스 다시 작성하려면 ALTER INDEX 문의 REBUILD 옵션을 사용합니다.

업데이트 가능한 columnstore는 먼저 rowstore 형식이며 델타 테이블이라고도 하는 OPEN 행 그룹에 새 데이터를 삽입합니다. 열려 있는 행 그룹이 가득 차면 상태가 CLOSED변경됩니다. 닫힌 행 그룹은 튜플 이동기에 의해 columnstore 형식으로 압축되고 상태는 COMPRESSED로 변경됩니다. Tuple mover는 정기적으로 켜지는 백그라운드 프로세스로, 닫힌 열 그룹 중 columnstore 행 그룹으로 압축할 수 있는 그룹이 있는지 확인합니다. 또한 튜플 이동기는 모든 행이 삭제된 행 그룹을 할당 취소합니다. 할당 취소된 행 그룹은 사용 중지됨으로 표시됩니다. 튜플 이동기를 즉시 실행하려면 ALTER INDEX 문의 REORGANIZE 옵션을 사용합니다.

다 채워진 columnstore 행 그룹은 압축되며, 새 행을 수락하지 않습니다. 압축된 그룹에서 행이 삭제되면 행은 그대로 유지되지만 삭제된 것으로 표시됩니다. 압축된 그룹에 대한 업데이트는 압축된 그룹에서 삭제로 구현되고 열려 있는 그룹에 삽입됩니다.

사용 권한

VIEW SERVER STATE 권한이 필요합니다.

예: Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)

다음 예제에서는 sys.pdw_nodes_column_store_row_groups 테이블을 다른 시스템 테이블에 조인하여 특정 테이블에 대한 정보를 반환합니다. 계산 PercentFull 열은 행 그룹의 효율성에 대한 추정값입니다. 단일 테이블에 대한 정보를 찾으려면 WHERE 절 앞에 있는 주석 하이픈을 제거하고 테이블 이름을 제공합니다.

SELECT IndexMap.object_id,   
  object_name(IndexMap.object_id) AS LogicalTableName,   
  i.name AS LogicalIndexName, IndexMap.index_id, NI.type_desc,   
  IndexMap.physical_name AS PhyIndexNameFromIMap,   
  CSRowGroups.*,  
  100*(ISNULL(deleted_rows,0))/total_rows AS PercentDeletedRows   
FROM sys.tables AS t  
JOIN sys.indexes AS i  
    ON t.object_id = i.object_id  
JOIN sys.pdw_index_mappings AS IndexMap  
    ON i.object_id = IndexMap.object_id  
    AND i.index_id = IndexMap.index_id  
JOIN sys.pdw_nodes_indexes AS NI  
    ON IndexMap.physical_name = NI.name  
    AND IndexMap.index_id = NI.index_id  
JOIN sys.pdw_nodes_column_store_row_groups AS CSRowGroups  
    ON CSRowGroups.object_id = NI.object_id   
    AND CSRowGroups.pdw_node_id = NI.pdw_node_id  
    AND CSRowGroups.distribution_id = NI.distribution_id
    AND CSRowGroups.index_id = NI.index_id      
WHERE total_rows > 0
--WHERE t.name = '<table_name>'   
ORDER BY object_name(i.object_id), i.name, IndexMap.physical_name, pdw_node_id;  

다음 Azure Synapse Analytics 예제에서는 클러스터형 열 저장소의 파티션당 행 수와 Open, Closed 또는 Compressed Row 그룹에 있는 행 수를 계산합니다.

SELECT
    s.name AS [Schema Name]
    ,t.name AS [Table Name]
    ,rg.partition_number AS [Partition Number]
    ,SUM(rg.total_rows) AS [Total Rows]
    ,SUM(CASE WHEN rg.State = 1 THEN rg.Total_rows Else 0 END) AS [Rows in OPEN Row Groups]
    ,SUM(CASE WHEN rg.State = 2 THEN rg.Total_Rows ELSE 0 END) AS [Rows in Closed Row Groups]
    ,SUM(CASE WHEN rg.State = 3 THEN rg.Total_Rows ELSE 0 END) AS [Rows in COMPRESSED Row Groups]
FROM sys.pdw_nodes_column_store_row_groups rg
  JOIN sys.pdw_nodes_tables pt
    ON rg.object_id = pt.object_id
    AND rg.pdw_node_id = pt.pdw_node_id
    AND pt.distribution_id = rg.distribution_id
  JOIN sys.pdw_table_mappings tm
    ON pt.name = tm.physical_name
  INNER JOIN sys.tables t
    ON tm.object_id = t.object_id
  INNER JOIN sys.schemas s
    ON t.schema_id = s.schema_id
GROUP BY s.name, t.name, rg.partition_number
ORDER BY 1, 2

참고 항목

Azure Synapse Analytics 및 병렬 데이터 웨어하우스 카탈로그 뷰
CREATE COLUMNSTORE INDEX(Transact-SQL)
sys.pdw_nodes_column_store_segments(Transact-SQL)
sys.pdw_nodes_column_store_dictionaries(Transact-SQL)