分区统计

简介:

对于分区表,SQL Server内部使用分区ID(PartitionID)唯一标识一个分区,对于任何一个对象(table,index 或 indexed view),每一个分区都有一个分区编号(Prtition number),该编号在对象的索引上是唯一的,用于标记基础表或索引视图的一个分区。

一,查看分区

通过系统视图:sys.partitions 查看分区对象(Table或index)的基本信息,在该视图中,如果index_id=0,表示基础表(Underlying Table)是堆(Heap)结构,堆表是没有创建的聚集索引的存储结构;如果index_id=1,表示基础表是平衡树(B-Tree)结构,在堆表上创建聚集索引,可以把堆表结构转换为平衡树(B-Tree)结构;如果index_id>1,表示索引是非聚集索引。由于基础表要么是堆表结构,要么是B-Tree结构,因此,index_id只会是0,或者1,不可能同时存在1和0。

data_compression 字段表示每个分区的数据压缩类型,rows字段表示每个分区的近似的数据总行数。通过统计rows字段,能够快速统计基础表近似的总的数据行数量,设置条件 index<=1,表示只统计聚集索引或堆表的总数据行数量。

select sum(rows) as ApproximateTotalRows
from sys.partitions
where 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_count
from 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_pages
from sys.dm_db_partition_stats ps
where ps.object_id=object_id('xx.xx','U')
group by ps.object_id,ps.index_id
复制代码

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

select *
from sys.system_internals_allocation_units
where container_id=72057621135294464  --partition id

参考文档:

sys.dm_db_partition_stats (Transact-SQL)

作者悦光阴
本文版权归作者和博客园所有,欢迎转载,但未经作者同意,必须保留此段声明,且在文章页面醒目位置显示原文连接,否则保留追究法律责任的权利。
分类: Partition




本文转自悦光阴博客园博客,原文链接:http://www.cnblogs.com/ljhdo/p/5657516.html,如需转载请自行联系原作者
目录
打赏
0
0
0
0
20
分享
相关文章
|
10月前
分区表统计信息收集
分区表统计信息收集
61 1
为什么我的topic总共有15个分区,但是每单个服务里面看都只有11个分区
为什么我的topic总共有15个分区,但是每单个服务里面看都只有11个分区
51 0
统计数组中的重复数据的数量
这篇文章总结了5种统计数组中重复数据数量的方法。方法1和4使用for循环和对象存储计数;方法2和5利用`reduce`函数,其中方法5是最简写形式;方法3是特定场景下的应用,针对特定值计数。所有方法最终都返回一个对象,键为数组元素,值为出现次数。
246 3
一个表中索引的数量是不是越多越好?
往InnoDB表新增数据时,都会基于主键给自动建立聚簇索引。 随着我们不停的在表里插入数据,会不停的在数据页里插入数据。一个数据页放满后,就会分裂成多个数据页,这时就需要索引页去指向各个数据页。
141 0
统计圆内格点数目
🎈每天进行一道算法题目练习,今天的题目是“统计圆内格点数目”。
209 0
如何查看表和索引的统计信息
原文:如何查看表和索引的统计信息     这几天要求做一个服务器的统计信息,主要针对表和索引。下面我就简单分享几个查询数据表和索引统计信息的方法: 1.使用T-SQL 语句实现: select schema_name(t.
1227 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等