|
一、場(chǎng)景
這一段時(shí)間使用SQL Server 2005 對(duì)幾個(gè)系統(tǒng)進(jìn)行表分區(qū),這幾個(gè)系統(tǒng)都有一些特點(diǎn),比如數(shù)據(jù)庫(kù)某張表持續(xù)增長(zhǎng),給數(shù)據(jù)庫(kù)帶來(lái)了很大的壓力。
現(xiàn)在假如提供一臺(tái)新的服務(wù)器,那么我們應(yīng)該如何規(guī)劃這個(gè)數(shù)據(jù)庫(kù)呢?應(yīng)該如何進(jìn)行最小宕機(jī)時(shí)間的數(shù)據(jù)庫(kù)轉(zhuǎn)移呢?如果規(guī)劃數(shù)據(jù)庫(kù)呢?
二、環(huán)境準(zhǔn)備
要搭建一個(gè)好的系統(tǒng),首先要從硬件和操作系統(tǒng)出發(fā),好的設(shè)置和好的規(guī)劃是高性能的前提,下面我就來(lái)說(shuō)說(shuō)自己的一些看法,歡迎大家提出異議;
1) 對(duì)磁盤(pán)做RAID0(比如3*300G),必要時(shí)可以考慮RAID5、RAID10;
2) 使用兩張千兆網(wǎng)卡,一張用于外網(wǎng),一張用于內(nèi)網(wǎng)(這也需要千兆路由器的配合);
3) 邏輯分區(qū)C為系統(tǒng)分區(qū)(50G),邏輯分區(qū)D為程序安裝分區(qū)(50G),邏輯分區(qū)E為數(shù)據(jù)庫(kù)文件邏輯分區(qū);
4) 安裝Microsoft Windows Server 2003, Enterprise Edition SP2(x64)操作系統(tǒng);
5) D盤(pán)格式化的時(shí)候使用默認(rèn)分配單元大小,E盤(pán)格式為64k分配單元;
6) 安裝Microsoft SQL Server 2005(x64)數(shù)據(jù)庫(kù);
7) 在我們網(wǎng)上鄰居-本地連接-屬性-Microsoft網(wǎng)絡(luò)的文件和打印機(jī)共享-最大化網(wǎng)絡(luò)應(yīng)用程序數(shù)據(jù)吞吐量(勾選上);
8) 運(yùn)行-gpedit.msc-Windows設(shè)置-安全設(shè)置-本地策略-用戶權(quán)限分配-內(nèi)存中鎖定頁(yè)面-設(shè)置用戶組(比如Administrators);
9) 運(yùn)行-services.msc,設(shè)置啟動(dòng)類型為手動(dòng),并且停止除了SQL Server (MSSQLSERVER)之外的SQL Server服務(wù),除非你對(duì)某些服務(wù)需要啟動(dòng),比如作業(yè)、全文索引;
10) 設(shè)置虛擬內(nèi)存大小,我通常設(shè)置為4096MB-8192MB;
三、前期工作
在進(jìn)行分區(qū)之前,我們首先要分析這個(gè)表的數(shù)據(jù)量(行數(shù))有多少?這個(gè)表的存儲(chǔ)空間(物理存儲(chǔ))有多少?需要確定分區(qū)文件多大為合理?還需要確認(rèn)我們按照表中哪個(gè)字段進(jìn)行分區(qū)?后期的維護(hù)是否需要對(duì)分區(qū)進(jìn)行管理(比如交換分區(qū)進(jìn)行數(shù)據(jù)歸檔等)?
假設(shè)我們決定以自增ID作為分區(qū)字段(其實(shí)應(yīng)該叫分區(qū)數(shù)值類型),我們就可以使用上面的行數(shù)和存儲(chǔ)空間來(lái)計(jì)算我們的分區(qū)邊界值了,因?yàn)槲覀兇_認(rèn)了分區(qū)文件的大小。比如我們表A記錄為:1.5億,占用空間為:700G,如果我們可以接受的文件大小為10G(這個(gè)要根據(jù)如果需要做交換分區(qū)和一些存儲(chǔ)空間、硬盤(pán)等信息確認(rèn)的),那么我們的分區(qū)值可以這樣計(jì)算:1.5億/(700G/10G)≈200W,也就是:200W,400W,600W等等;
分區(qū)文件在創(chuàng)建的時(shí)候就應(yīng)該初始化為包含分區(qū)邊界值數(shù)據(jù)大小,比如上面的分區(qū)文件可以設(shè)置為10G,這樣就不用重新分配空間了。也可以使用定量增長(zhǎng),比如2048MB。
在設(shè)置自增ID為分區(qū)字段,那么通常我們會(huì)讓ID成為聚集索引,而且設(shè)置填充因子為100%,這樣我們的數(shù)據(jù)頁(yè)就不會(huì)有空白了。
如果后期的維護(hù)需要對(duì)分區(qū)進(jìn)行管理,比如交換分區(qū)進(jìn)行數(shù)據(jù)歸檔,交換分區(qū)是需要索引對(duì)齊的,而索引對(duì)齊有兩種:索引對(duì)齊;按存儲(chǔ)位置對(duì)齊的表。
索引對(duì)齊:假如你想讓數(shù)據(jù)與索引分開(kāi)到不同的文件,可以使用兩個(gè)不同的分區(qū)方案,但是使用同一個(gè)分區(qū)函數(shù),這樣就把索引分開(kāi)了。(如圖1)
存儲(chǔ)位置對(duì)齊:創(chuàng)建非聚集索引的時(shí)候設(shè)置【數(shù)據(jù)空間規(guī)范】,兩個(gè)索引對(duì)象可以使用相同的分區(qū)架構(gòu),并且具有相同分區(qū)鍵的所有數(shù)據(jù)行最后將位于同一個(gè)文件組中。這就叫存儲(chǔ)位置對(duì)齊。(數(shù)據(jù)和索引在同一個(gè)文件中)(如圖2)
(圖1)
(圖2)
四、分區(qū)步驟
下面提供了創(chuàng)建分區(qū)的代碼,其中包括模板還有例子(Ext),這里最主要是注意一些命名規(guī)范,希望對(duì)大家有用:
步驟1:為MyDataBase數(shù)據(jù)庫(kù)創(chuàng)建2個(gè)文件組,如果你不想用PRIMARY作為分區(qū),你可以創(chuàng)建多一個(gè)文件組,文件組=分區(qū)值個(gè)數(shù)+1;
--1.創(chuàng)建文件組
ALTER DATABASE [數(shù)據(jù)庫(kù)名]
ADD FILEGROUP [FG_表名_字段名_分區(qū)編號(hào)]
--Ext
ALTER DATABASE [MyDataBase]
ADD FILEGROUP [FG_User_Id_1]
ALTER DATABASE [MyDataBase]
ADD FILEGROUP [FG_User_Id_2]
it知識(shí)庫(kù):SQL Server 2005 分區(qū)模板與實(shí)例,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。