sys.dm_db_partition_stats (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

返回当前数据库中每个分区的页和行计数信息。

注意

若要从 Azure Synapse Analytics 或 Analytics 平台系统(PDW)调用此名称,请使用名称 sys.dm_pdw_nodes_db_partition_stats。 partition_id sys.dm_pdw_nodes_db_partition_stats 不同于 Azure Synapse Analytics 目录视图中partition_id sys.partitions 。 Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。

列名称 数据类型 说明
partition_id bigint 分区 ID。 在数据库中是唯一的。 此值与partition_idsys.partitions目录视图中的值相同,但 Azure Synapse Analytics 除外。
object_id int 包含该分区的表或索引视图的对象 ID。
index_id int 包含该分区的堆或索引的 ID。

0 = 堆
1 = 聚集索引。
> 1 = 非聚集索引
partition_number int 索引或堆中从 1 开始的分区号。
in_row_data_page_count bigint 分区中存储行内数据所用的页数。 如果分区是堆的一部分,则该值为堆中的数据页数。 如果分区是索引的一部分,则该值为叶级别中的页数。 (未计入 B+ 树中非叶页的数目。)以上两种情况都未计入 IAM(索引分配映射)页。 对于 xVelocity 内存优化列存储索引,始终为 0。
in_row_used_page_count bigint 用于存储和管理分区中的行内数据的总页数。 该计数包括非叶 B+ 树页、IAM 页以及 in_row_data_page_count 列包含的全部页。 对列存储索引始终为 0。
in_row_reserved_page_count bigint 为存储和管理该分区中的行内数据而保留的总页数,包括已使用的和未使用的页。 对列存储索引始终为 0。
lob_used_page_count bigint 用于存储和管理分区中的行外 textntextimagevarchar(max)nvarchar(max)varbinary(max)xml 列的页数。 包含 IAM 页。

用于存储和管理分区中的列存储索引的 LOB 总数。
lob_reserved_page_count bigint 为存储和管理分区中的行外 textntextimagevarchar(max)nvarchar(max)varbinary(max)xml 列而保留的页数,包括使用的和未使用的页。 包含 IAM 页。

为存储和管理分区中的列存储索引而保留的 LOB 总数。
row_overflow_used_page_count bigint 用于保存和管理分区中行溢出 varcharnvarcharvarbinarysql_variant 列的页数。 包含 IAM 页。

对列存储索引始终为 0。
row_overflow_reserved_page_count bigint 为保存和管理分区中行溢出 varcharnvarcharvarbinarysql_variant 列而保留的页数,包括已使用的和未使用的页。 包含 IAM 页。

对列存储索引始终为 0。
used_page_count bigint 用于分区的总页数。 计算方法为 in_row_used_page_count + lob_used_page_count + row_overflow_used_page_count。
reserved_page_count bigint 为分区保留的总页数。 计算方法为 in_row_reserved_page_count + lob_reserved_page_count + row_overflow_reserved_page_count。
row_count bigint 分区中的大约行数。
pdw_node_id int 适用于:Azure Synapse Analytics、Analytics Platform System (PDW)

此分发所在节点的标识符。
distribution_id int 适用于:Azure Synapse Analytics、Analytics Platform System (PDW)

与分布关联的唯一数值 ID。

注解

动态 sys.dm_db_partition_stats 管理视图(DMV)显示有关用于存储和管理行内数据 LOB 数据的空间以及数据库中所有分区的行溢出数据的信息。 每个分区对应一行。

输出所基于的计数在内存中缓存,或存储在各种系统表中的磁盘上。

行内数据、LOB 数据以及行溢出数据表示构成分区的三个分配单元。 可以在 sys.allocation_units 目录视图中查询数据库中每个分配单元的元数据。

如果堆或索引未分区,则它由一个分区(分区号为 1)组成,因而只会为该堆或索引返回一行。 可以在 sys.partitions 目录视图中查询有关数据库中全部表和索引的每个分区的元数据。

可以通过求全部相关分区计数的和来获取单个表或单个索引的总计数。

权限

VIEW DATABASE STATE需要和VIEW DEFINITION权限才能查询sys.dm_db_partition_stats动态管理视图。 有关动态管理视图权限的详细信息,请参阅动态管理视图和函数 (Transact-SQL)

SQL Server 2022 及更高版本的权限

需要对数据库具有 VIEW DATABASE PERFORMANCE STATE 和 VIEW SECURITY DEFINITION 权限。

示例

A. 返回数据库中所有索引和堆的所有分区的所有计数

以下示例演示了 AdventureWorks2022 数据库中全部索引和堆的全部分区的所有计数。

USE AdventureWorks2022;  
GO  
SELECT * FROM sys.dm_db_partition_stats;  
GO  

B. 返回表及其索引的所有分区的所有计数

以下示例演示了 HumanResources.Employee 表及其索引的全部分区的所有计数。

USE AdventureWorks2022;  
GO  
SELECT * FROM sys.dm_db_partition_stats   
WHERE object_id = OBJECT_ID('HumanResources.Employee');  
GO  

°C 返回堆或聚集索引的已用页总数和总行数

以下示例返回 HumanResources.Employee 表的堆或聚集索引使用的总页数和总行数。 因为默认情况不对 Employee 表分区,请注意和仅包含一个分区。

USE AdventureWorks2022;  
GO  
SELECT SUM(used_page_count) AS total_number_of_used_pages,   
    SUM (row_count) AS total_number_of_rows   
FROM sys.dm_db_partition_stats  
WHERE object_id=OBJECT_ID('HumanResources.Employee')    AND (index_id=0 or index_id=1);  
GO