sys.internal_partitions(Transact-SQL)

适用于: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>');