sys.pdw_nodes_column_store_row_groups (Transact-SQL)

适用于:Azure Synapse Analytics Analytics 平台系统(PDW)

按细分提供聚集列存储索引信息,以帮助管理员在 Azure Synapse Analytics 中做出系统管理决策。 sys.pdw_nodes_column_store_row_groups 具有物理存储的行总数(包括标记为已删除的行数)的列,以及标记为已删除的行数的列。 使用 sys.pdw_nodes_column_store_row_groups 确定哪些行组具有较高百分比的已删除行,应重新生成。

列名称 数据类型 说明
object_id int 基础表的 ID。 这是计算节点上的物理表,而不是控制节点上逻辑表的object_id。 例如,object_id与 sys.tables 中的object_id不匹配。

若要与 sys.tables 联接,请使用sys.pdw_index_mappings。
index_id int object_id表上的聚集列存储索引的 ID。
partition_number int 保存行组 row_group_id的表分区的 ID。 可以使用 partition_number 将此 DMV 联接到 sys.partitions。
row_group_id int 此行组的 ID。 这在分区中是唯一的。
dellta_store_hobt_id bigint delta 行组的 hobt_id;或如果行组类型不是 delta,则为 NULL。 delta 行组是正在接受新记录的读/写行组。 增量行组具有 OPEN 状态。 delta 行组仍采用行存储格式,并且尚未压缩成列存储格式。
state tinyint 与 state_description 关联的 ID 号。

1 = OPEN

2 = CLOSED

3 = COMPRESSED
state_desccription nvarchar(60) 行组的持久状态的说明:

OPEN - 接受新记录的读/写行组。 开放的行组仍采用行存储格式,并且尚未压缩成列存储格式。

CLOSED - 已填充但尚未由元组移动器进程压缩的行组。

COMPRESSED - 已填充和压缩的行组。
total_rows bigint 行组中物理存储的总行数。 一些行可能已删除,但它们仍被存储。 一个行组中的最大行数为 1,048,576(十六进制 FFFFF)。
deleted_rows bigint 物理存储在标记为要删除的行组中的行数。

对于 DELTA 行组,始终为 0。
size_in_bytes int 此行组中所有页面的组合大小(以字节为单位)。 此大小不包括存储元数据或共享字典所需的大小。
pdw_node_id int Azure Synapse Analytics 节点的唯一 ID。
distribution_id int 分发的唯一 ID。

注解

针对每个表中具有聚合或非聚合列存储索引的每个列存储行组返回一行。

使用 sys.pdw_nodes_column_store_row_groups 来确定行组中包含的行数和行组的大小。

当行组中的已删除行数量增长到占总行数的较大百分比时,该表的效率将下降。 重新生成列存储索引以减少表的大小,同时减少读取该表所需的磁盘 I/O。 若要重新生成列存储索引,请使用 ALTER INDEX 语句的 REBUILD 选项。

可更新列存储首先将新数据 插入 OPEN 行组,该行组采用行存储格式,有时也称为增量表。 打开的行组已满后,其状态将更改为 CLOSED。 关闭的行组由元组移动器压缩为列存储格式,状态更改为 COMPRESSED。 元组搬运者是一个后台进程,它定期唤醒并检查是否有任何关闭的行组正准备要压缩成列存储行组。 元组搬运者还取消分配其中已删除每个行的行组。 已解除分配的行组标记为 已停用。 若要立即运行元组移动器,请使用 ALTER INDEX 语句的 REORGANIZE 选项。

如果列存储行组已填充,它将进行压缩并停止接受新行。 当从压缩组中删除行时,这些行将保留但标记为已删除。 对压缩组的更新将实现为压缩组中的删除以及对打开组的插入。

权限

需要 VIEW SERVER STATE 权限 。

示例:Azure Synapse Analytics 和 Analytics Platform System (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 示例计算聚集列存储的每个分区的行数,以及打开、关闭或压缩行组中的行数:

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)