SqlServer 自動化分割槽方案

2022-01-30 13:32:49 字數 4044 閱讀 5384

本文是我關於資料庫分割槽的方案的一些想法,或許有些問題。僅供大家討論。sqlserver (sqlserver 2005\sqlserver 2008)實現分割槽需要在企業版下進行.

sqlserver的分割槽分為大致有以下個過程:1、建立檔案組用以存放資料檔案 2、建立檔案組使用者資料檔案 3、建立分割槽函式 4、建立分割槽方案  5、在分割槽方案下建立表

本文是在sqlserver2012 下完成的。

過程:1、新建資料庫,在屬性中建立檔案以及檔案組。如下圖:

可以在下圖中選擇檔案組、或者新建檔案組使用者存放上圖中新建的檔案:

2、建立分割槽函式

create partition function

[partitionbyid

](int

) as range left

forvalues (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

@filegroupname

set@sql='

alter database [test] add filegroup '+

@filegroupname

print

@sql

exec(@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'+

''+@filegroupname

print

@sql

print

1exec(@sql

)print2--

修改分割槽方案,用乙個新的檔案組用於存放下一新增的資料

set@sql='

alter partition scheme [partitionschemebyid] next used'+

''+@filegroupname

exec(@sql)

--分割槽架構

print

3select

@maxvalue

=convert(int,max

(value))

from

sys.partition_range_values prv

select

@secondmaxvalue

=convert(int,min

(value))

from

(

select

top2

*from sys.partition_range_values order

by value desc

) prv

set@differ

=@maxvalue

-@secondmaxvalue

alter partition function partitionbyid() --

分割槽函式

split range (@maxvalue+

@differ)

這樣在計畫裡指定每天什麼時候執行,下圖:

參考:

自動化分析工具PSSDIAG

微軟有個內部工具 pssdiag,它能收集非常多的資訊,僅需要簡單的配置和操作步驟。預設安裝路徑 c program files x86 microsoft pssdiag 1.在上圖的介面裡設定好需要收集的資訊,點s e,會彈出乙個對話方塊,顯示 修改生成的pssd.cab檔案存放位置,如果不存放...

SQL Server 自動化功能

為了保證安全,資料庫每天都要備份很多次,如果讓人來按時按點的進行備份,是很不現實的。這時,我們可以通過sql server 自動化的功能來完成資料庫的備份操作。自動化功能包括 了解了自動化的功能,接下來我們了解一下自動化管理元素都有哪些。自動化管理元素 使用自動化過程中,會使用警報將錯誤的操作資訊報...

SQL Server 自動化運維系列

本系列為sql server自動化運維的一些操作技巧點,所有內容都是根據日常運維過程中最經常遇到的問題,並為此形成了一些自動化運維的方式,皆為原創.供部分dba和開發人員瀏覽借鑑,所應用平台基於微軟server平台,所利用技術為power shell,所關注的點為sql server.1 sql s...