适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Microsoft Fabric 中的 SQL 数据库
按段提供列存储索引信息。
对于聚集列存储索引, sys.column_store_row_groups 具有物理存储的行总数(包括标记为已删除的行数)的列,以及标记为已删除的行数的列。 用于 sys.column_store_row_groups 确定哪些行组具有较高百分比的已删除行,应重新生成。
| 列名称 | 数据类型 | 说明 |
|---|---|---|
object_id |
int | 定义此索引的表的 ID。 |
index_id |
int | 列存储索引的 ID。 |
partition_number |
int | 保存由 row_group_id.. 标识的行组的表分区。 用于 partition_number 联接 sys.partitions。 |
row_group_id |
int | 与此行组关联的行组编号。 此数字在分区中是唯一的。 -1 = 内存优化表的结尾。 |
delta_store_hobt_id |
bigint |
hobt_id
OPEN增量存储中的行组。如果行组不在增量存储中,则为 NULL。 内存优化表尾部的 NULL。 |
state |
tinyint | 描述行组状态的数字。 0 = INVISIBLE1 = OPEN2 = CLOSED3 = COMPRESSED4 = TOMBSTONE |
state_description |
nvarchar(60) | 行组的状态说明:INVISIBLE - 在从增量存储中的数据生成过程中隐藏的压缩段。 读取作使用增量存储,直到不可见压缩段完成。 然后,新段变为可见,并删除源增量存储区。OPEN - 接受新行的读/写行组。 打开的行组仍采用行存储格式,不会压缩为列存储格式。CLOSED - 已填充但尚未由元组移动器进程压缩的行组。COMPRESSED - 填充和压缩的行组。 |
total_rows |
bigint | 行组中物理存储的总行数。 已删除的行仍可存储。 行组中的最大行数为 1,048,576。 |
deleted_rows |
bigint | 标记为已删除但仍存储的行组中的总行数。 此值始终 0 用于增量行组。对于非聚集列存储索引,此值不包括存储在删除缓冲区中的已删除行。 有关详细信息,以及查找删除缓冲区中已删除的行数,请参阅 sys.internal_partitions。 |
size_in_bytes |
bigint | 对于增量存储和列存储行组,此行组(不包括元数据或共享字典)中的所有数据的大小(以字节为单位)。 |
注解
对于具有聚集列存储索引或非聚集列存储索引的每个表的每个分区,为每个列存储行组返回一行。
用于 sys.column_store_row_groups 了解行组中的行数和行组的大小。
当行组中的已删除行数量增长到占总行数的较大百分比时,该表的效率将下降。 重新生成列存储索引以减少表的大小,同时减少读取该表所需的磁盘 I/O。 若要重新生成列存储索引,请使用 REBUILD 语句的 ALTER INDEX 子句。
可更新列存储首先将新数据插入打开的行组中,该行组采用行存储格式,有时也称为增量表。 打开的行组已满后,其状态将更改为 CLOSED。 已关闭的行组由元组移动器压缩为列存储格式,状态更改为 COMPRESSED。 元组搬运者是一个后台进程,它定期唤醒并检查是否有任何关闭的行组正准备要压缩成列存储行组。 元组移动器还会解除分配删除每一行的任何行组。 已解除分配的行组标记为 TOMBSTONE。 若要立即运行元组移动器,请使用 REORGANIZE 语句的 ALTER INDEX 子句。
当列存储行组填充时,它将压缩,并停止接受新行。 从压缩组中删除行时,它们将保留,但标记为已删除。 对压缩组的更新将实现为压缩组中的删除以及对打开组的插入。
权限
如果用户对表具有 VIEW DEFINITION 权限,则返回表的信息。
目录视图中仅显示用户拥有的安全对象的元数据,或用户对其拥有某些权限的安全对象的元数据。 有关详细信息,请参阅 元数据可见性配置。
示例
以下示例联接 sys.column_store_row_groups 视图和其他系统视图以返回有关聚集列存储索引的信息。 列 percent_full 是行组效率的估计值。
SELECT i.object_id,
OBJECT_SCHEMA_NAME(i.object_id) AS schema_name,
OBJECT_NAME(i.object_id) AS table_name,
i.name AS index_name,
i.type_desc AS index_type_desc,
rg.partition_number,
rg.row_group_id,
rg.state_description,
rg.total_rows,
rg.deleted_rows,
rg.size_in_bytes,
100 * (rg.total_rows - ISNULL(rg.deleted_rows, 0)) / total_rows AS percent_full
FROM sys.indexes AS i
INNER JOIN sys.column_store_row_groups AS rg
ON i.object_id = rg.object_id
AND i.index_id = rg.index_id
WHERE INDEXPROPERTY(i.object_id, i.name, 'IsClustered') = 1
ORDER BY schema_name, table_name, index_name, row_group_id;
有关详细信息,请参阅 检查列存储索引的碎片。