SQL Server數(shù)據(jù)庫(kù)自動(dòng)化管理分區(qū)設(shè)計(jì)方案圖解
SQL Server數(shù)據(jù)庫(kù)可以自動(dòng)化管理分區(qū),本文就以圖解的形式介紹了SQL Server數(shù)據(jù)庫(kù)的自動(dòng)化管理分區(qū)的設(shè)計(jì)方案,接下來(lái)我們就開(kāi)始介紹這一部分內(nèi)容。
一、設(shè)計(jì)說(shuō)明
設(shè)計(jì)這個(gè)自動(dòng)化的目的是想要交替、重復(fù)地使用固定的幾個(gè)分區(qū)(分區(qū)編號(hào)01~05)來(lái)保存數(shù)據(jù),當(dāng)***一個(gè)分區(qū)就是快滿的時(shí)候,我們會(huì)把最舊數(shù)據(jù)的分區(qū)的數(shù)據(jù)清空出分區(qū),新數(shù)據(jù)就可以使用老分區(qū)空間了。
應(yīng)用這個(gè)自動(dòng)化管理分區(qū)的環(huán)境是有些限制的,其一:分區(qū)的數(shù)據(jù)是呈現(xiàn)遞增的,比如分區(qū)字段是自增Id值,或者是以日期作為分區(qū);其二:可以接受歷史數(shù)據(jù)被移除分區(qū)表帶來(lái)的問(wèn)題。其三:一天進(jìn)庫(kù)的數(shù)量不應(yīng)大于分區(qū)管理表PartitionManage中Part_Value與Change_Value的差,因?yàn)槲覀冏鳂I(yè)執(zhí)行的頻率是1天,不過(guò)你可以調(diào)整Change_Value或者作業(yè)的執(zhí)行頻率。
二、看圖說(shuō)話
(圖1:整體概念圖)
數(shù)據(jù)流經(jīng)過(guò)分區(qū)方案,被分配到不同的分區(qū)中,從圖中可以看出,分區(qū)是可以重復(fù)利用的,后臺(tái)有一個(gè)所謂的自動(dòng)化切換分區(qū)的作業(yè)在跑,目的就是如果重復(fù)利用這些分區(qū)。這里的PRIMARY目的就是說(shuō)明它與其它文件組的一個(gè)平級(jí)關(guān)系,而且我們?cè)谧鼋粨Q分區(qū)時(shí)候也會(huì)用到PRIMARY,需要事先分配足夠的空間。
(圖2:自動(dòng)化設(shè)計(jì)圖)
這是自動(dòng)化切換分區(qū)作業(yè)的邏輯處理,其中分區(qū)管理表的設(shè)計(jì)是比較重要的,它的靈活度關(guān)系到整個(gè)自動(dòng)化的效果; 這個(gè)邏輯有以下幾個(gè)特點(diǎn):
1. 分區(qū)的索引進(jìn)行存儲(chǔ)位置對(duì)齊;其它索引在創(chuàng)建時(shí)就使用了分區(qū)方案,索引數(shù)據(jù)跟隨分區(qū)數(shù)據(jù)一起存儲(chǔ)在分區(qū)中;
2. 分區(qū)管理表,包含了分區(qū)記錄數(shù)預(yù)警設(shè)計(jì),在Id達(dá)到這個(gè)值后就會(huì)進(jìn)行交換分區(qū);
3. 分區(qū)管理表,F(xiàn)ileGroup_String字段的數(shù)據(jù)可以通過(guò)SQL腳本自動(dòng)化生成,條件就是分區(qū)文件組名稱需要有規(guī)律;
4. 臨時(shí)表是創(chuàng)建在PRIMARY主分區(qū)上,跟原表使用相同的分區(qū)方案;需要事先給PRIMARY分配大于或者等于一個(gè)分區(qū)文件大小的空間,這樣在交換分區(qū)的時(shí)候就不用增量為主分區(qū)分配數(shù)據(jù)空間;
5. 交換舊數(shù)據(jù)到臨時(shí)表,使用下面的語(yǔ)句可以把數(shù)據(jù)交換到相同的分區(qū)中編號(hào),這樣可以應(yīng)對(duì)臨時(shí)表就是一個(gè)歷史表,而好處就是歷史表也同樣使用了分區(qū)。
- ALTER TABLE [tb] SWITCH PARTITION @PARTITION_num TO [Temp_tb] PARTITION @PARTITION_num
6. 這里需要先修改分區(qū)方案,才能修改分區(qū)函數(shù),這個(gè)跟創(chuàng)建分區(qū)函數(shù)與分區(qū)方案的順序是剛好相反的。
(圖3:分區(qū)管理表PartitionManage)
字段說(shuō)明:Change_Value(預(yù)警Id值)Part_Value(分區(qū)函數(shù)值)FileGroup_String(分區(qū)文件組名稱)IsDone(狀態(tài))UpdateTime(更新時(shí)間);
這就是那個(gè)分區(qū)管理表(PartitionManage),它是經(jīng)過(guò)了幾個(gè)版本后才把字段確定下來(lái)的,現(xiàn)在它已經(jīng)比較完善了,能應(yīng)對(duì)比較多的情況:
1. 比如我們可以修改預(yù)警值(Change_Value),讓數(shù)據(jù)提早進(jìn)入交換分區(qū);
2. 比如我們可以修改分區(qū)值(Part_Value),達(dá)到調(diào)整分區(qū)間隔的目的;
3. 比如我們可以修改分區(qū)文件組名稱(FileGroup_String),達(dá)到跳級(jí)文件組的目的;通過(guò)修改分區(qū)管理表來(lái)設(shè)置分區(qū)值與分區(qū)文件組的對(duì)應(yīng)關(guān)系;
4. 再比如,我們一次性修改了分區(qū)方案和分區(qū)函數(shù),已經(jīng)去到很后面的分區(qū)值了,那么我們只要設(shè)置這些分區(qū)值的狀態(tài)(IsDone)為1(True)就可以解決了。
5. 記錄了進(jìn)行交換分區(qū)的時(shí)間(UpdateTime),方便查詢;
(圖4:分區(qū)為Id字段的記錄分布圖)
這是一個(gè)實(shí)戰(zhàn)中的分區(qū)情況,這樣的分區(qū)特點(diǎn)就是分區(qū)里面的記錄數(shù)基本上是持平的,在Partition_num=20的記錄中明顯多了很多記錄,這就是因?yàn)槲覀儧](méi)有及時(shí)進(jìn)行交換分區(qū)造成的。
(圖5:分區(qū)為ClassId(分類)字段的記錄分布圖)
這同樣是另外一個(gè)生產(chǎn)環(huán)境中的真實(shí)數(shù)據(jù),這個(gè)分區(qū)方式的特點(diǎn)就是分區(qū)的記錄數(shù)不太均等,而我們前期需要做的就是通過(guò)劃分每個(gè)分區(qū)中ClassId的值來(lái)盡量均衡分區(qū)中的記錄數(shù),所以可以看到最小與***值跨度區(qū)別是比較大。
關(guān)于SQL Server數(shù)據(jù)庫(kù)自動(dòng)化管理分區(qū)的設(shè)計(jì)方案就介紹到這里,如果想了解更多關(guān)于SQL Server數(shù)據(jù)庫(kù)的知識(shí),可以看一下這里的文章:http://database.51cto.com/sqlserver/,您的收獲就是對(duì)我們工作***的肯定!
【編輯推薦】