如何检查 Partiton Scheme是否mark Next Used FileGroup?

检查 Partiton Scheme是否mark Next Used FileGroup,需要使用一个system view:sys.destination_data_spaces,如果存在Next Used FileGroup,那么视图返回的Partition的个数会比Partition Function划分的分区数量+1.

Contains a row for each data space destination of a partition scheme.


Column name


Data type


Description


partition_scheme_id      


int


ID of the partition-scheme that is partitioning to the data space.


destination_id       


int


ID (1-based ordinal) of the destination-mapping, unique within the partition scheme.


data_space_id      


int


ID of the data space to which data for this scheme‘s destination is being mapped.

表示一个Partition Scheme中的每个Partition和FileGroup之间的关系。

destination_id  是Partition Number

data_space_id  是FileGroupID

1,创建分区函数

-- create parition function
CREATE PARTITION FUNCTION pf_int_Left (int)
AS
RANGE LEFT
FOR VALUES (10,20);

2,创建分区scheme

--create partition scheme
CREATE PARTITION SCHEME PS_int_Left
AS
PARTITION pf_int_Left
TO ([primary], [primary], [primary]);

3,在split partition之前,必须使用alter partition scheme 指定一个Next Used FileGroup。如果Partiton Scheme没有指定 next used filegroup,那么alter partition function split range command 执行失败,不改变partition scheme。

--split range and add new one boudary value
ALTER PARTITION FUNCTION pf_int_Left ()
split range (30);

Msg 7710, Level 16, State 1, Line 2
Warning: The partition scheme ‘PS_int_Left‘ does not have any next used filegroup. Partition scheme has not been changed.

4,如果检查 Partiton Scheme是否指定Next Used FileGroup?

使用sys.destination_data_spaces视图来检查,该系统视图返回Partition 和filegroup之间的Mapping关系。如果一个FileGoup被alter partition scheme 标记为next used Filegroup,那么Partition 的个数会比多Partition function划分的分区多一个。

select ps.name as PartitionSchemeName,
    ps.data_space_id as PartitionSchemeID,
    pf.name as PartitionFunctionName,
    ps.function_id as PartitionFunctionID,
    pf.boundary_value_on_right,
    dds.destination_id as PartitionNumber,
    dds.data_space_id as FileGroupID
from sys.partition_schemes ps
inner join sys.destination_data_spaces dds
    on ps.data_space_id=dds.partition_scheme_id
inner join sys.partition_functions pf
    on ps.function_id=pf.function_id
where ps.name=‘PS_int_Left‘

上述脚本返回3个partition,说明没有next used filegroup。

5,使用 alter partition scheme标记 next used filegroup

--alter partition scheme to mark next used filegroup
ALTER PARTITION SCHEME PS_int_Left
NEXT USED [db_fg1];

查看分区个数

select ps.name as PartitionSchemeName,
    ps.data_space_id as PartitionSchemeID,
    pf.name as PartitionFunctionName,
    ps.function_id as PartitionFunctionID,
    pf.boundary_value_on_right,
    dds.destination_id as PartitionNumber,
    dds.data_space_id as FileGroupID
from sys.partition_schemes ps
inner join sys.destination_data_spaces dds
    on ps.data_space_id=dds.partition_scheme_id
inner join sys.partition_functions pf
    on ps.function_id=pf.function_id
where ps.name=‘PS_int_Left‘

可以看到,多了一个partition,partition number=4,存放的FileGroupID=2。

6,将 FileGroup 取消标记为 next used filegroup

--alter partition scheme to cancel next used filegroup
ALTER PARTITION SCHEME PS_int_Left
NEXT USED;

7,Merge Range移除FileGroup

--merge range
ALTER PARTITION FUNCTION pf_int_Left ()
merge range (20);

查看Partition Function指定的Boundary Value

select pf.name as PartitionFunctionName,
    pf.function_id,
    pf.type,
    pf.type_desc,
    pf.boundary_value_on_right,
    pf.fanout,
    prv.boundary_id,
    prv.value
from sys.partition_functions pf
inner join sys.partition_range_values prv
    on pf.function_id=prv.function_id
where pf.name=‘pf_int_Left‘

绑定到Partition Scheme的Filegroup如下

select ps.name as PartitionSchemeName,
    ps.data_space_id as PartitionSchemeID,
    pf.name as PartitionFunctionName,
    ps.function_id as PartitionFunctionID,
    pf.boundary_value_on_right,
    dds.destination_id as PartitionNumber,
    dds.data_space_id as FileGroupID
from sys.partition_schemes ps
inner join sys.destination_data_spaces dds
    on ps.data_space_id=dds.partition_scheme_id
inner join sys.partition_functions pf
    on ps.function_id=pf.function_id
where ps.name=‘PS_int_Left‘

参考文档:

http://sqlfascination.com/2009/09/30/how-to-remember-the-next-used-filegroup-in-a-partition-scheme/

时间: 2024-10-13 12:58:26

如何检查 Partiton Scheme是否mark Next Used FileGroup?的相关文章

partition function 和 partition scheme 修改示例

Altering a Partition Function: SPLIT and MERGE Partition functions are not static: They can change over time, and their changes propagate through the partition scheme to the partitioned table. You can alter a partition function to change the boundary

Partition Range 的 Split 和 Merge 操作

对于分区表,在 empty partition 上进行 Partition Range 的 Split 和 Merge 操作,实际上是metadata-only change,Data 并不会移动.如果在 non-empty 的partition上进行split和merge,是十分耗时的. Best Practice: Maintain an empty partition on both ends of the partitioned table and ensure that only em

更改分区表的Partition Schema

在 DB 系统中,有一些分区表使用DateKey(int 数据类型)作为Partition Column,每个月作为一个Partition,由于在Fore-End呈现的报表大多数是基于Month的查询,按照Month分区的设计能够提高查询性能,但是,前任DBA没有创建Schedule来维护Partition Function,导致不能增加新的Partition,末端Partition的数据量增加.以何种方式来快速增加分区,才能减少对系统的负面影响? CREATE PARTITION FUNCTI

JAVA多线程之Synchronize 关键字原理

image 众所周知 Synchronize 关键字是解决并发问题常用解决方案,有以下三种使用方式: 同步普通方法,锁的是当前对象. 同步静态方法,锁的是当前 Class 对象. 同步块,锁的是 {} 中的对象. 实现原理: JVM 是通过进入.退出对象监视器( Monitor )来实现对方法.同步块的同步的. 具体实现是在编译之后在同步方法调用前加入一个 monitor.enter 指令,在退出方法和异常处插入 monitor.exit 的指令. 其本质就是对一个对象监视器( Monitor

ARTIFICIAL INTELLIGENCE SEARCH

ARTIFICIAL INTELLIGENCE SEARCHASSIGNMENTThis is the assignment for the sub-module Artificial Intelligence Search ofthe module Software Methodologies. The hand-out date is Monday 14thOctober 2019 and it is to be completed and handed in via DUO by 2p.m

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

未分区的表,只能存储在一个FileGroup中:对table进行分区后,每一个分区都存储在一个FileGroup中.表分区是将逻辑上一个完整的表,按照特定的字段拆分成Partition set,分散到(相同或不同的)FileGroup中,每一个Partition在FileGroup中都独立存储,每一个parititon都属于唯一的表对象,每一个Partition 都有唯一的ID. 在创建表时,使用On 子句指定table存储的逻辑位置: On  filegroup | "default"

无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)

1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"

Android 开发技巧 - Android 6.0 以上权限大坑和权限检查基类封装

简单介绍 关于运行时权限的说法,早在Google发布android 6.0的时候,大家也听得蛮多的.从用户的角度来讲,用户是受益方,更好的保护用户的意思,而对于开发者来说,无疑增加了工作量. 对于6.0以下的权限在安装时,会根据权限声明产生一个权限列表,用户只有同意才能完成app的安装.而在6.0以后,不需要先对权限授权就可以安装app,对于权限的授权我们可以选择禁止. 在新的权限机制中,Google将权限分为两类: Normal Permissions(普通权限):不涉及用户隐私,不需要用户进

SwiftLint——Swift代码检查及自动格式化工具

某软不给力,正在做的UWP项目停工了.官方说法是要等到RS2发布新的VOIP架构,再看看是不是给某软面子.虽然Beta用户中发出了几点愤怒的声音,但是木有用.有用的只能是某软的Skype for business UWP版拿下几个大订单,才有说服力.像现在这样鶸的表现,真是让人心寒…… 当然UWP开发入门还会继续写下去,本篇只是偷个懒,把工作中整理的资料放上来.蜀黍我可不是叛徒,我没发过誓不给水果开发APP,某软现在就是最大的果蛆.无奈混口饭吃,让写Swift就写呗,水果一套加上Xcode,咋用