sys.column_store_row_groups (Transact-SQL)

在各个段的基础上提供聚集列存储索引信息,以便帮助管理员作出系统管理决定。 sys.column_store_row_groups 具有一列来表示物理存储的总行数(包括标记为已删除的那些行),并包括一列来表示标记为已删除的行数。 使用 sys.column_store_row_groups 来确定哪些行组具有高的已删除行百分比而应重新生成。

适用范围:SQL Server(SQL Server 2014 到当前版本)。

列名称

数据类型

说明

object_id

int

对其定义此索引的表的 ID。

index_id

int

具有此列存储索引的表的索引 ID。

partition_number

int

保留行组 row_group_id 的表分区的 ID。 您可以使用 partition_number 将此 DMV 联接到 sys.partitions。

row_group_id

int

与此行组关联的行组编号。 这在分区中是唯一的。

delta_store_hobt_id

bigint

delta 行组的 hobt_id;或如果行组类型不是 delta,则为 NULL。 delta 行组是正在接受新记录的读/写行组。 delta 行组具有 OPEN 状态。 delta 行组仍采用行存储格式,并且尚未压缩成列存储格式。

state

tinyint

与 state_description 关联的 ID 号。

0 = INVISIBLE

1 = OPEN

2 = CLOSED

3 = COMPRESSED

state_desccription

nvarchar(60)

行组的持久状态的说明:

INVISIBLE - 从增量存储区中的数据进行生成过程中的隐藏压缩段。 读操作将使用增量存储区,直至完成不可见的压缩段。 然后,新段变为可见,并删除源增量存储区。

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

CLOSED – 一个已填充的行组,但尚未由元组搬运者进程压缩。

COMPRESSED – 已填充和压缩的行组。

total_rows

bigint

行组中物理存储的总行数。 一些行可能已删除,但它们仍被存储。 一个行组中的最大行数为 1,048,576(十六进制 FFFFF)。

deleted_rows

bigint

行组中标记为已删除的总行数。 对于 DELTA 行组,此值始终为 0。

size_in_bytes

bigint

对于 DELTA 和 COLUMNSTORE 行组,指的是此行组中所有数据的大小(不包括元数据和共享字典),以字节为单位。

备注

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

使用 sys.column_store_row_groups 可确定该行组中包括的行数和行组的大小。

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

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

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

权限

如果用户对表具有 VIEW DEFINITION 权限,则返回该表的信息。

目录视图中仅显示用户拥有的安全对象的元数据,或用户对其拥有某些权限的安全对象的元数据。有关详细信息,请参阅元数据可见性配置

示例

以下示例将 sys.column_store_row_groups 表联接到其他系统表,以返回有关特定表的信息。 计算的 PercentFull 列是对行组效率的估计。 若要查找有关单个表的信息,请删除 WHERE 子句前面的注释连字符,并提供表名称。

SELECT i.object_id, object_name(i.object_id) AS TableName, 
i.name AS IndexName, i.index_id, i.type_desc, 
CSRowGroups.*, 
100*(total_rows - ISNULL(deleted_rows,0))/total_rows AS PercentFull  
FROM sys.indexes AS i
JOIN sys.column_store_row_groups 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)

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)

概念

查询 SQL Server 系统目录常见问题

列存储索引简介

列存储索引简介