SQLServer数据库自动化分区方案
小标 2018-07-18 来源 : 阅读 2190 评论 0

摘要:本文主要向大家介绍了SQLServer数据库自动化分区方案,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

本文主要向大家介绍了SQLServer数据库自动化分区方案,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

  SqlServer的分区分为大致有以下个过程:1、创建文件组用以存放数据文件 2、创建文件组用户数据文件 3、创建分区函数 4、创建分区方案  5、在分区方案下创建表

  本文是在SqlServer2012 下完成的。

  过程:

      1、新建数据库,在属性中创建文件以及文件组。如下图:

  

  可以在下图中选择文件组、或者新建文件组用户存放上图中新建的文件:

     

  

  2、创建分区函数

CREATE PARTITION FUNCTION [partitionById](int) AS RANGE LEFT FOR VALUES (100, 200, 300)

   3、创建分区方案

CREATE PARTITION SCHEME [partitionSchemeById] AS PARTITION [partitionById] --分区函数TO ([FileGroup1], [FileGroup2],  [FileGroup3],[FileGroup4])

  注意以上分区函数使用的是LEFT ,根据后面的值指明了数据库中如何存放。以上存放方式为:-∞,100],(100,200],(200,300],(300,+∞).此分区方案是依据分区函数

partitionById 创建的。那就是说以上Id的存储区间分别被放在[FileGroup1], [FileGroup2],  [FileGroup3],[FileGroup4]文件组的文件中。

4、依据分区方案创建表

CREATE TABLE [dbo].[Account](

    [Id] [int] NULL,

    [Name] [varchar](20) NULL,

    [Password] [varchar](20) NULL,

    [CreateTime] [datetime] NULL

) ON partitionSchemeById(Id)

  注意:创建表的脚本中需要指明分区方案和分区依据列

  查看某分区的数据:

SELECT * FROM [dbo].[Account]WHERE $PARTITION.[partitionById](Id)=1

  查询结果如下图:

 

 

至此,分区似乎已经结束了。但是看看后一个分区里的数据:Id>=400的全部放在了一个数据文件中。这样在有可能瓶颈就发生在了这个分区中。

如果数据不停的增长,希望分区也不断的自动增加。如:每天生成一个新的分区来存放分区新的数据。如到第二天时,新生成一个分区来存放(400,500 ]的数据。

这里我采用了Sql Job的方式来自动产生分区:

 

DECLARE @maxValue INT,

    @secondMaxValue INT,

    @differ    INT,

    @fileGroupName VARCHAR(200),

    @fileNamePath    VARCHAR(200),

    @fileName   VARCHAR(200),

    @sql        NVARCHAR(1000)

 

SET @fileGroupName='FileGroup'+REPLACE(REPLACE(REPLACE(CONVERT(varchar, GETDATE(), 120 ),'-',''),' ',''),':','') PRINT @fileGroupNameSET @sql='ALTER DATABASE [Test] ADD FILEGROUP '+@fileGroupNamePRINT @sqlEXEC(@sql)

SET @fileNamePath='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLINSTANCE\MSSQL\DATA\'+REPLACE(REPLACE(REPLACE(CONVERT(varchar, GETDATE(), 120 ),'-',''),' ',''),':','') +'.NDF'SET @fileName=N'File'+REPLACE(REPLACE(REPLACE(CONVERT(varchar, GETDATE(), 120 ),'-',''),' ',''),':','')

SET @sql='ALTER DATABASE [Test] ADD FILE (NAME='''+@fileName+''',FILENAME=N'''+@fileNamePath+''') TO FILEGROUP'+'    '+@fileGroupNamePRINT @sqlPRINT 1EXEC(@sql)PRINT 2

--修改分区方案,用一个新的文件组用于存放下一新增的数据SET @sql='ALTER PARTITION SCHEME [partitionSchemeById] NEXT USED'+'    '+@fileGroupNameEXEC(@sql)

  --分区架构PRINT 3 SELECT @maxValue =CONVERT(INT,MAX(value))FROM SYS.PARTITION_RANGE_VALUES PRV

SELECT @secondMaxValue = CONVERT(INT,MIN(value))FROM 

(

    SELECT TOP 2 * FROM SYS.PARTITION_RANGE_VALUES ORDER BY VALUE DESC

)

 PRV

SET @differ=@maxValue - @secondMaxValue 

 

ALTER PARTITION FUNCTION partitionById()  --分区函数

SPLIT RANGE (@maxValue+@differ)

本文由职坐标整理并发布,了解更多内容,请关注职坐标SQL Server数据库频道!

 


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程