在分区表中,SQL Server使用一个唯一的分区ID(PartitionID)来标识一个分区,对于任何一个对象(table,index 或 indexed view),都有一个分区号(Prtition number)标记标识对象的一个Partition。

一,查看分区表的基本信息

通过 sys.partitions 能够查看分区对象(Table或index)的基本信息。如果index_id=0,表示base table是Heap结构,对Heap进行分区;如果index_id=1,表示base table是BTree结构,对Clustered Index 进行分区;如果index_id>1,表示对Nonclustered index进行分区。

data_compression 表示分区对象在每个分区的数据压缩类型,rows字段表示分区对象在每个分区的近似的数据行数量,尽量保证每个分区的数据行总量均匀分布

通过统计rows字段,能够快速统计Base Table的近似的数据行总数量,index<=1表示只统计clustered index 或 heap。

select sum(rows) as ApproximateTotalRowsfrom sys.partitionswhere object_id=object_id('xx.yyy','U')    and index_id<=1

二,统计每个分区占用的存储空间
在做分区时,应尽量保证每个分区的数据行总量均匀分布,每个分区占用的存储空间均匀分布,避免单个分区过大,系统视图 sys.dm_db_partition_stats 能够查看每个分区所占用的Pages数量。

复制代码

select ps.partition_id,
    ps.object_id,
    ps.index_id,
    ps.partition_number,
    ps.in_row_data_page_count,
    ps.in_row_used_page_count,
    ps.in_row_reserved_page_count,
    ps.lob_used_page_count,
    ps.lob_reserved_page_count,
    ps.row_overflow_used_page_count,
    ps.row_overflow_reserved_page_count,
    ps.used_page_count,
    ps.reserved_page_count,
    ps.row_countfrom sys.dm_db_partition_stats ps
where ps.object_id=object_id('xx.xx','U')

复制代码

统计每个分区对象的占用的总的Pages数量

复制代码

select 
    ps.object_id,
    ps.index_id,    sum(ps.in_row_data_page_count) as data_pages,    sum(ps.used_page_count) as used_pages,    sum(ps.reserved_page_count) as reserved_pagesfrom sys.dm_db_partition_stats pswhere ps.object_id=object_id('xx.xx','U')group by ps.object_id,ps.index_id

复制代码

三,查看每个分区的Allocation Unit
SQL Server为每个分区分配了一个allcotion unit,用于为该分区分配存储空间,通过系统内部视图:  能够查看该alloction unit分配的Page信息。

select *from sys.system_internals_allocation_unitswhere container_id=72057621135294464  --partition id