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