适用于:SQL Server 2016 (13.x) 及更高版本
Azure SQL 数据库
Azure SQL 托管实例
为每个行集返回一行,用于跟踪基于磁盘的表上的列存储索引的内部数据。 这些行集是列存储索引的内部,跟踪已删除的行、行组映射和增量存储行组。 它们跟踪每个表分区的数据。 每个表至少有一个分区。 每次重新生成列存储索引时,数据库引擎都会重新创建行集。
列名称 | 数据类型 | 说明 |
---|---|---|
partition_id |
bigint | 此分区的分区 ID。 在数据库中是唯一的。 |
object_id |
int | 包含分区的表的对象 ID。 |
index_id |
int | 表上定义的列存储索引的索引 ID。 1 = 聚集列存储索引 2 = 非聚集列存储索引 |
partition_number |
int | 分区号。 1 = 分区表的第一个分区,或非分区表的单个分区。 2 = 第二个分区,依此等。 |
internal_object_type |
tinyint | 跟踪列存储索引的内部数据的行集对象。 2 = COLUMN_STORE_DELETE_BITMAP 3 = COLUMN_STORE_DELTA_STORE 4 = COLUMN_STORE_DELETE_BUFFER 5 = COLUMN_STORE_MAPPING_INDEX |
internal_object_type_desc |
nvarchar(60) |
COLUMN_STORE_DELETE_BITMAP - 此位图索引跟踪标记为从列存储中删除的行。 位图适用于每个行组,因为分区可以有多个行组中的行。 这些行在物理上仍存在,并且占用列存储中的空间。COLUMN_STORE_DELTA_STORE - 存储尚未压缩为列存储的行组(称为行组)。 每个表分区可以有零个或多个增量存储行组。COLUMN_STORE_DELETE_BUFFER - 为了维护对可更新的非聚集列存储索引的删除。 当查询从基础行存储表中删除行时,删除缓冲区会跟踪从列存储中删除的行。 当删除的行数超过 1,048,576 时,它们会通过元组移动器后台线程或 ALTER INDEX ... REORGANIZE 作合并回删除位图。 在任何给定的时间点,删除位图和删除缓冲区的联合表示所有已删除的行。COLUMN_STORE_MAPPING_INDEX - 仅在聚集列存储索引具有辅助非聚集索引时使用。 这会将非聚集索引键映射到列存储中的行组和行 ID。 它仅存储移动到其他行组的行的键。 当增量行组压缩到列存储中时,合并作合并来自两个不同的行组的行时,会出现这种情况。 |
row_group_id |
int | deltastore 行组的 ID。 每个表分区可以有零个或多个增量存储行组。 |
hobt_id |
bigint | 内部行集对象的 ID(HoBT)。 可以与其他系统视图和函数(如 sys.dm_db_index_physical_stats() 联接,以获取有关内部行集的物理特征的详细信息。 |
rows |
bigint | 此分区中的大约行数。 |
data_compression |
tinyint | 每个分区的压缩类型: 0 = NONE 1 = ROW 2 = PAGE |
data_compression_desc |
nvarchar(60) | 每个分区的压缩类型。 行存储表 NONE 的可能值为, ROW 以及 PAGE 。 列存储表 COLUMNSTORE 的可能值为和 COLUMNSTORE_ARCHIVE 。 |
权限
要求具有 public
角色的成员身份。 有关详细信息,请参阅 Metadata Visibility Configuration。
注解
数据库引擎每次创建或重新生成列存储索引时,都会重新创建新的列存储内部索引。
示例
答: 查看表的所有内部行集
此示例返回表的所有内部列存储行集。 还可以使用该 hobt_id
列与其他系统视图和函数联接,并查找有关特定行集的详细信息。
SELECT i.object_id,
i.index_id,
i.name,
p.hobt_id,
p.internal_object_type_id,
p.internal_object_type_desc
FROM sys.internal_partitions AS p
INNER JOIN sys.indexes AS i
ON i.object_id = p.object_id
WHERE p.object_id = OBJECT_ID('<table name>');