在分区表中,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
二,统计每个分区占用的存储空间
在做分区时,应尽量保证每个分区的数据行总量均匀分布,每个分区占用的存储空间均匀分布,避免单个分区过大,系统视图 能够查看每个分区所占用的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