博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SqlServer 自动化分区方案
阅读量:5905 次
发布时间:2019-06-19

本文共 2543 字,大约阅读时间需要 8 分钟。

  本文是我关于数据库分区的方案的一些想法,或许有些问题。仅供大家讨论。SqlServer (SqlServer 2005\SqlServer 2008)实现分区需要在企业版下进行.

  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 PRVSELECT @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)

这样在计划里指定每天什么时候运行,下图:

 

参考:

 

转载地址:http://shdpx.baihongyu.com/

你可能感兴趣的文章
Excel与XML相互转换 - C# 简单实现方案
查看>>
远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)
查看>>
基础二:javascript面向对象、创建对象、原型和继承总结(下)
查看>>
360. Sort Transformed Array
查看>>
docker使用流程
查看>>
一次解决OOM的经历
查看>>
JavaScript闭包
查看>>
樹莓派初始化安裝配置筆記
查看>>
TouchID本地身份验证
查看>>
android:launchMode小分析
查看>>
大转变,苹果或于明年推出使用 ARM 芯片的 Mac
查看>>
Docker 容器与主机时间同步
查看>>
爬虫基础-http请求的基础知识
查看>>
第十六章:数据绑定(三)
查看>>
antiX 17.4 发布,轻量级 Linux 发行版
查看>>
Java高并发秒杀Api-web 层
查看>>
全网互联之高速通道
查看>>
JVM GC杂谈之理论入门
查看>>
byteorder.h学习
查看>>
一线大厂青睐的前端人,90%满足这3个条件
查看>>