创建分区表和查看分区表的Metadata

未分区的表,只能存储在一个FileGroup中;对table进行分区后,每一个分区都存储在一个FileGroup中。表分区是将逻辑上一个完整的表,按照特定的字段拆分成Partition set,分散到(相同或不同的)FileGroup中,每一个Partition在FileGroup中都独立存储,每一个parititon都属于唯一的表对象,每一个Partition 都有唯一的ID。

 

在创建表时,使用On 子句指定table存储的逻辑位置:

On  filegroup | "default" 表示逻辑存储位置是单一的FileGroup;

ON  partition_scheme_name ( partition_column_name ) 表示逻辑存储位置是多个FileGroup,按照partition_column_name将table拆分成多个partition,每一个partition都存储在一个指定的Filegroup中。

CREATE TABLE  [schema_name . ] table_name ( <column_definition> ) [ ON { partition_scheme_name ( partition_column_name ) | filegroup | "default" } ] [ WITH ( <table_option> [ ,...n ] ) ] [ ; ]

 

Partition的含义就是table的一部分逻辑存储空间。

跟逻辑存储空间相对应的是物理存储空间,物理存储空间是由File指定的,FileGroup是File的集合,每一个File都属于唯一的FileGroup。将table的存储空间拆分到不同的FileGroup中,逻辑上是将table的存储管理体系增加了一层 Partition,介于Table和FileGroup中间,Table的数据存储在Partition,Partition存储在FileGroup中,FileGroup管理着File,File是实际存储data的物理文件。

 

table为什么要增加Parition?因为FileGroup是所有的Table共享,Partition是由一个table独占,每一个Partition都唯一属于一个table。这样,对某个parititon进行操作,而不影响table的其他parition,也不会影响其他table。

 

一:创建分区表的步骤

Step1, 创建分区函数

分区函数的作用是提供分区字段的类型和分区的边界值

CREATE PARTITION FUNCTION [pf_int](int) 
AS RANGE LEFT 
FOR VALUES (10, 20)


pf_int 的含义是按照int类型分区,分区的边界值是10,20,left表示边界值属于左边界。两个边界值能够分成三个分区,别是(-infinite,10],(10,20],(20,+infinite)。

Step2,创建分区scheme

分区scheme的作用是为Parition分配FileGroup,Partition Scheme和FileGroup在逻辑上等价,都是数据存储的逻辑空间,只不过Partition Scheme指定的是多个FileGroup。

CREATE PARTITION SCHEME [ps_int] 
AS PARTITION [pf_int] 
TO ([PRIMARY], [db_fg1], [db_fg1])


不管是在不同的FileGroup中,还是在相同的FileGroup中,分区都是独立存储的。

 

Step3,创建分区表

创建分区表,实际上是使用on子句指定table存储的逻辑位置。

复制代码
create table dbo.dt_test
(
    ID int,
    code int
)
on [ps_int] (id)
复制代码


二,查看Partition的Metadata

1, 查看partition function

select *
from sys.partition_functions

 

查看partition function定义的边界值

select * 
from sys.partition_range_values

 

查看partition function 定义的parmeter,这个Parmeter是一个data type,system_type_id标识该data type。

select *
from sys.partition_parameters

 

根据system_type_id查看data type

select * 
from sys.types
where system_type_id=56

 

2, 查看Partition scheme和 filegroup

select *
from sys.partition_schemes

data_space_ID 是数据空间ID,每一个Parition Scheme都有一个ID。

 

select *
from sys.filegroups

data_space_ID 是数据空间ID,每一个FileGroup都有一个ID。

 

3, 查看Data Space

select *
from sys.data_spaces

Each filegroup has one row, and each partition scheme has one row. If the row refers to a partition scheme, data_space_id can be joined with sys.partition_schemes.data_space_id. If the row referes to a file, data_space_id can be joined with sys.filegroups.data_space_id.

 

sys.data_spaces 是sys.filegroups 和 sys.partition_schemes 结果的交集,充分说明,partition scheme和filegroup都是数据存储的逻辑空间。

4,partition scheme和filegroup 之间的关系

一个partition scheme能够使用多个filegroup存储数据,同时一个filegroup可以被多个partition scheme使用,partition scheme和filegroup 之间的关系是many-to-many,sql server使用 sys.destination_data_spaces 提供partition scheme和filegroup 之间的关系。

select *
from sys.destination_data_spaces

partition_scheme_id  是 sys.partition_schemes的data_space_id,标识一个Partition Scheme。

data_space_id  是 sys.filegroups的data_space_id,标识partition scheme使用的filegroup。

destination_id  是 Partition number。Partition Number是一个数字,从1开始,标识table的parition的编号。表的partition number从左向右开始编号,最左边的分区,其partition number 是1。

 

5,查看分区的信息

select *
from sys.partitions
where object_id=object_id('dbo.dt_test')

partition_id:每一个partition都有一个ID,唯一标识该分区。

rows:分区包含的数据行数目

data_compression和data_compression_desc:partition 使用的数据压缩类型

 

6,查看分区的统计信息

select *
from sys.dm_db_partition_stats
where object_id=object_id('dbo.dt_test')

 

 

used_page_count

bigint

Total number of pages used for the partition. Computed as in_row_used_page_count + lob_used_page_count +row_overflow_used_page_count.

reserved_page_count

bigint

Total number of pages reserved for the partition. Computed as in_row_reserved_page_count + lob_reserved_page_count +row_overflow_reserved_page_count.

row_count

bigint

The approximate number of rows in the partition.

 

sys.dm_db_partition_stats displays information about the space used to store and manage in-row data, LOB data, and row-overflow data for all partitions in a database. One row is displayed per partition.

The counts on which the output is based are cached in memory or stored on disk in various system tables.

In-row data, LOB data, and row-overflow data represent the three allocation units that make up a partition. The sys.allocation_units catalog view can be queried for metadata about each allocation unit in the database.

If a heap or index is not partitioned, it is made up of one partition (with partition number = 1); therefore, only one row is returned for that heap or index. Thesys.partitions catalog view can be queried for metadata about each partition of all the tables and indexes in a database.

The total count for an individual table or an index can be obtained by adding the counts for all relevant partitions.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值