本文是我關於資料庫分割槽的方案的一些想法,或許有些問題。僅供大家討論。sqlserver (sqlserver 2005\sqlserver 2008)實現分割槽需要在企業版下進行.
sqlserver的分割槽分為大致有以下個過程:1、建立檔案組用以存放資料檔案 2、建立檔案組使用者資料檔案 3、建立分割槽函式 4、建立分割槽方案 5、在分割槽方案下建立表
本文是在sqlserver2012 下完成的。
過程:1、新建資料庫,在屬性中建立檔案以及檔案組。如下圖:
可以在下圖中選擇檔案組、或者新建檔案組使用者存放上圖中新建的檔案:
2、建立分割槽函式
create partition function3、建立分割槽方案[partitionbyid
](int
) as range left
forvalues (100, 200, 300)
create partition scheme [注意以上分割槽函式使用的是left ,根據後面的值指明了資料庫中如何存放。以上存放方式為:-∞,100],(100,200],(200,300],(300,+∞).此分割槽方案是依據分割槽函式partitionschemebyid
]as partition [
partitionbyid
] --分割槽函式
to ([
filegroup1
], [
filegroup2
], [
filegroup3
],[filegroup4])
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 ),'
-',''),'
',''),'
:',''
@filegroupname
set@sql='
alter database [test] add filegroup '+
@filegroupname
@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
@sql
1exec(@sql
)print2--
修改分割槽方案,用乙個新的檔案組用於存放下一新增的資料
set@sql='
alter partition scheme [partitionschemebyid] next used'+
''+@filegroupname
exec(@sql)
--分割槽架構
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...