011_分区

/*

1、一个文件或文件组不能由多个数据库使用。例如,任何其他数据库都不能使用包含 sales 数据库中的数据和对象的文件 sales.mdf 和 sales.ndf。

2、一个文件只能是一个文件组的成员。

3、一个文件组可以包含多个文件,一个数据表在创建时可以指定要将数据放在那一个文件组上,而没有办法指定是要放在哪一个文件上,文件组对组内的所有文件都使用按比例填充策略。

4、事务日志文件不能属于任何文件组。

注:一个文件组中有多个文件时,文件组对组内的所有文件都使用按比例填充策略。

如果文件 f1 有 100 MB 可用空间,文件 f2 有 200 MB 可用空间,则从文件 f1 中分配一个区,从文件 f2 中分配两个区,依此类推。这样,两个文件几乎同时填满,并且可获得简单的条带化。

分区建立在表的基础上,只有将分区建立在不同【磁盘】下的不同【文件组】下的【文件】下,才可以减轻I/O压力。

建立在同一个磁盘上的分区文件(无论是否为不同文件组),可以降低备份成本。

删除文件组,须达到以下条件:

1、修改分区表,使其不依赖分区方案。

2、删除分区方案(依赖要删除的文件组)。DROP PARTITION SCHEME [Part_func_scheme_Name]

删除文件,要先清空文件里的数据,删除之前数据一定要记得先备份,可将数据复制到其他表

DBCC SHRINKFILE (FileName, EMPTYFILE);

每个数据文件都会有GAM、SGAM、DCM、BCM、PFS页面

*/

--创建文件组

ALTER DATABASE TEST ADD FILEGROUP test_filegroup01

ALTER DATABASE TEST ADD FILEGROUP test_filegroup02

ALTER DATABASE TEST ADD FILEGROUP test_filegroup03

--删除文件组

ALTER DATABASE TEST REMOVE FILEGROUP test_filegroup03

--创建文件

ALTER DATABASE test ADD FILE

(NAME=N‘test_filegroup01_file01‘,FILENAME=N‘E:\sql_2008\test_filegroup01_file01.ndf‘,SIZE=3MB,FILEGROWTH=1MB)

TO FILEGROUP test_filegroup01

ALTER DATABASE test ADD FILE

(NAME=N‘test_filegroup01_file02‘,FILENAME=N‘E:\sql_2008\test_filegroup01_file02.ndf‘,SIZE=3MB,FILEGROWTH=1MB)

TO FILEGROUP test_filegroup01

ALTER DATABASE test ADD FILE

(NAME=N‘test_filegroup02_file01‘,FILENAME=N‘E:\sql_2008\test_filegroup02_file01.ndf‘,SIZE=3MB,FILEGROWTH=1MB)

TO FILEGROUP test_filegroup02

--删除文件

ALTER DATABASE TEST REMOVE FILE test_filegroup02_file01

--查看文件组和文件信息

SELECT a.name 文件组名,a.data_space_id 文件组id,a.type 文件组类型,b.name 文件逻辑名,b.filename 文件物理名,*

FROM sys.filegroups a,sys.sysfiles b

WHERE a.data_space_id=b.groupid

--创建分区函数--test_partifunc_01

CREATE PARTITION FUNCTION test_partifunc_01(int)

AS RANGE LEFT FOR VALUES(50)--分为两个区,<50和>=50,如果想分为三个区,则为values(50,100)

--创建分区方案(将分区函数,文件组附加到分区方案中)--test_sche_partifunc

CREATE PARTITION SCHEME test_sche_partifunc

AS PARTITION test_partifunc_01--分区函数

TO (test_filegroup01,test_filegroup02)

--创建待分区的表--test_patition

create TABLE test_patition(

id INT

,date nvarchar(20)

) ON test_sche_partifunc(id)--将按照id字段来分区

--向插入数据

DECLARE @tp INT=1

WHILE @tp<100

BEGIN

INSERT INTO test_patition VALUES(@tp,cast( floor(rand()*100)  AS NVARCHAR(20)))

set @[email protected]+1

END

--创建分区索引--[test_index_partition]

CREATE CLUSTERED INDEX [test_index_partition] ON [dbo].[test_patition] ([id])

WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF)

ON [test_sche_partifunc]([id])

--注:使用分区索引查询,可以避免多个cpu操作多个磁盘时产生的冲突。

--分区拆分

--在分区函数中新增一个边界值,即可将一个分区变为2个。

alter partition function test_partifunc_01()

split range(N‘50‘)  --将第二个分区拆为2个分区

--注意:如果分区函数已经指定了分区方案,则分区数需要和分区方案中指定的文件组个数保持对应一致。

--合并分区

--与拆分分区相反,去除一个边界值即可。

alter partition function test_partifunc_01()

merge range(N‘50‘)  --将第二第三分区合并

--注意:如果分区函数已经指定了分区方案,则分区数需要和分区方案中指定的文件组个数保持对应一致。

--分区视图

--分区视图是先建立带有字段约束的相同表,而约束不同,例如,第一个表的id约束为0-50,第二表为>50

--创建完一系列的表之后,用union all 连接起来创建一个视图,这个视图就形成啦分区视同。

--查看在分区文件2上的数据  (test_partifunc_01是分区函数)

SELECT * FROM test_patition WHERE $PARTITION.test_partifunc_01(id)=2

--查看分区函数

SELECT * FROM sys.partition_functions

--查看普通函数

SELECT * FROM sys.objects WHERE type=‘p‘

--查看分区方案

SELECT * FROM sys.partition_schemes

--查看边界值点

select * from sys.partition_range_values

EXEC [sys].[sp_helpdb] @dbname=test

select * FROM sys.system_internals_allocation_units

DBCC inD(TEST,test_patition,-1)

DBCC TRACEON(3604,-1)

DBCC PAGE(test,1,8,3)

-- 显示有关由Transact-SQL 语句生成的磁盘活动量的信息

SET STATISTICS IO off

--查看分区相关信息

SELECT  * FROM    sys.dm_db_index_physical_stats(DB_ID(‘test‘),OBJECT_ID(‘test_patition‘), NULL,NULL, ‘detailed‘)

--查看分区信息

SELECT OBJECT_NAME(p.object_id) AS ObjectName,

i.name                   AS IndexName,

p.index_id               AS IndexID,

ds.name                  AS PartitionScheme,

p.partition_number       AS PartitionNumber,

fg.name                  AS FileGroupName,

prv_left.value           AS LowerBoundaryValue,

prv_right.value          AS UpperBoundaryValue,

CASE pf.boundary_value_on_right

WHEN 1 THEN ‘RIGHT‘

ELSE ‘LEFT‘ END    AS Range,

p.rows AS Rows

FROM sys.partitions                  AS p

JOIN sys.indexes                     AS i

ON i.object_id = p.object_id

AND i.index_id = p.index_id

JOIN sys.data_spaces                 AS ds

ON ds.data_space_id = i.data_space_id

JOIN sys.partition_schemes           AS ps

ON ps.data_space_id = ds.data_space_id

JOIN sys.partition_functions         AS pf

ON pf.function_id = ps.function_id

JOIN sys.destination_data_spaces     AS dds2

ON dds2.partition_scheme_id = ps.data_space_id

AND dds2.destination_id = p.partition_number

JOIN sys.filegroups                  AS fg

ON fg.data_space_id = dds2.data_space_id

LEFT JOIN sys.partition_range_values AS prv_left

ON ps.function_id = prv_left.function_id

AND prv_left.boundary_id = p.partition_number - 1

LEFT JOIN sys.partition_range_values AS prv_right

ON ps.function_id = prv_right.function_id

AND prv_right.boundary_id = p.partition_number

WHERE

OBJECTPROPERTY(p.object_id, ‘ISMSShipped‘) = 0

UNION ALL

SELECT

OBJECT_NAME(p.object_id)    AS ObjectName,

i.name                      AS IndexName,

p.index_id                  AS IndexID,

NULL                        AS PartitionScheme,

p.partition_number          AS PartitionNumber,

fg.name                     AS FileGroupName,

NULL                        AS LowerBoundaryValue,

NULL                        AS UpperBoundaryValue,

NULL                        AS Boundary,

p.rows                      AS Rows

FROM sys.partitions     AS p

JOIN sys.indexes        AS i

ON i.object_id = p.object_id

AND i.index_id = p.index_id

JOIN sys.data_spaces    AS ds

ON ds.data_space_id = i.data_space_id

JOIN sys.filegroups           AS fg

ON fg.data_space_id = i.data_space_id

WHERE

OBJECTPROPERTY(p.object_id, ‘ISMSShipped‘) = 0

ORDER BY

ObjectName,

IndexID,

PartitionNumber

时间: 2024-10-28 10:24:23

011_分区的相关文章

Ubuntu boot分区满了,解决办法

查看当前系统启动用的内核版本 [email protected]:/boot# uname -rm 4.4.0-92-generic x86_64 [email protected]:/boot# 列出安装过的内核版本 [email protected]:/boot# dpkg --get-selections |grep linux-image linux-image-4.4.0-21-generic deinstall linux-image-4.4.0-45-generic deinsta

019 添加分区功能 - bos

一.基础调整 1.删除subarea.jsp中新增窗口的分区编码一行 2.修改Subarea.hbm.xml,主键生成策略为uuid 二.easyUI - combobox下拉框的使用 1.静态页面编写(并不实用) <select class="easyui-combobox"> <option>小黑</option> <option>小白</option> <option>小红</option> &l

Linux分区方案

Linux服务器分区的方案: 分区类型 分区的实际大小 / 1G-2G (最少要150–250MB) /boot 32M-100M (启动分区,最多只要100M左右) /opt 100M-1G (附加应用程序) /tmp 40M-1000M (最大可以设为1G左右,如果加载ISO镜像文件就设为4G左右吧,一般不用那么多) /home 2G-10G (每个用户100M左右,具体自定.用户目录.) /usr 3G-10G 最少要500M左右,一般宽松的服务器要分到4-6G) /usr/local 3

linux操作逻辑分区与交换分区

作业一: 1)   开启Linux系统前添加一块大小为15G的SCSI硬盘 2)   开启系统,右击桌面,打开终端 3)   为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区,大小为5G 4)   格式化主分区为ext3系统 [[email protected] 桌面]# mkfs.ext3 /dev/sdc1 5)   将逻辑分区设置为交换分区 [[email protected] 桌面]# mkswap /dev/sdc5 6)   启用上一步的交换分

Linux 磁盘分区

system call  系统调用,对硬件进行交互 mkdir进程 ->系统调用-->内核---->硬件 进程们称为用户模式,运行的空间用户空间,所有进程都运行在用户空间,因为他们没有特权 内核运行的位置称为内核 模式或者内核空间 用户的进程是运行在ring3  ,内核是运行在ring0上,ring3和ring0互相信号交互 任何程序在编程的时候,就利用了硬件芯片的功能 一个操作系统的文件系统,是管理磁盘分区的文件存储方式的,元数据在什么地方,数据存在什么地方,这些都是文件系统来管理,所

第九章 Linux系统下分区、格式化磁盘,学会挂载和卸载磁盘

1. 请查资料了解这些术语:/dev/hda, /dev/hdb, /dev/sda, /dev/sdb, 他们之间有什么区别?/dev/hda, /dev/hdb 是 IDE借口硬盘的块文件. /dev/hda  第一块IDE磁盘 : /dev/hdb 第二块IDE磁盘 /dev/sda, /dev/sdb 是SCSI接口硬盘的块文件. /dev/sda 第一块SCSI磁盘 :/dev/sdb 第二块SCSI磁盘 2. 为什么 du -b /etc/passwd  和 du -k  /etc/

Apache StratOS 云分区

云分区 下面章节详细解释何为云分区: 分区 StratOS的分区可以映射为IaaS的一个逻辑分区.这个逻辑分区可以是以下级别中的一种:Provider级别.Region级别.Zone级别或者Rack级别.一个逻辑分区至少需要定义一个Provider.逻辑分区定义时也可指定区分组.DevOps用户为了实现高可用,可以定义复合区域,将资源实例创建到不同的区域,比如不同的region.zone或者rack.例如如果将资源实例创建到EC2的不同可用ZONE,这样在其中一个ZONE出现问题时部署的应用仍然

MBR与GPT分区的区别及磁盘分区相关命令

一.MBR分区结构 主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是目前比较流行的一种分区结构.磁盘的0磁道0扇区称为MBR,它的大小是512字节,这个区域被分为三个部分: 第一部分为boot loader(主引导程序),占446字节: 第二部分为Partition table(分区表),即DPT,占64字节,每个分区项占用16个字节,这16个字节中存有活动状态标志.文件系统标识.起止柱面号.磁头号.扇区号.隐含扇区数目(4个字节).分区总扇区数目(4个字节

Apache Flink流分区器剖析

这篇文章介绍Flink的分区器,在流进行转换操作后,Flink通过分区器来精确得控制数据流向. StreamPartitioner StreamPartitioner是Flink流分区器的基类,它只定义了一个抽象方法: public abstract StreamPartitioner<T> copy(); 但这个方法并不是各个分区器之间互相区别的地方,定义不同的分区器的核心在于--各个分区器需要实现channel选择的接口方法: int[] selectChannels(T record,