熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

SQL Server 自動化管理分區設計方案

2013-11-15 14:48:22  來源: SQL Server 

  一設計說明

  設計這個自動化的目的是想要交替重復地使用固定的幾個分區(分區編號~)來保存數據當最後一個分區就是快滿的時候我們會把最舊數據的分區的數據清空出分區新數據就可以使用老分區空間了

  應用這個自動化管理分區的環境是有些限制的其一分區的數據是呈現遞增的比如分區字段是自增Id值或者是以日期作為分區;其二可以接受 歷史數據被移除分區表帶來的問題其三一天進庫的數量不應大於分區管理表PartitionManage中Part_Value與 Change_Value的差因為我們作業執行的頻率是不過你可以調整Change_Value或者作業的執行頻率;

  具體腳本可以參考SQL Server 自動化刪除表分區設計方案

  二看圖說話

  (圖整體概念圖)

  數據流經過分區方案被分配到不同的分區中從圖中可以看出分區是可以重復利用的後台有一個所謂的自動化切換分區的作業在跑目的就是如果 重復利用這些分區這裡的PRIMARY目的就是說明它與其它文件組的一個平級關系而且我們在做交換分區時候也會用到PRIMARY需要事先分配足夠 的空間

  (圖自動化設計圖)

  這是自動化切換分區作業的邏輯處理其中分區管理表的設計是比較重要的它的靈活度關系到整個自動化的效果; 這個邏輯有以下幾個特點

   分區的索引進行存儲位置對齊;其它索引在創建時就使用了分區方案索引數據跟隨分區數據一起存儲在分區中;

   分區管理表包含了分區記錄數預警設計在Id達到這個值後就會進行交換分區;

   分區管理表FileGroup_String字段的數據可以通過SQL腳本自動化生成條件就是分區文件組名稱需要有規律;

   臨時表是創建在PRIMARY主分區上跟原表使用相同的分區方案;需要事先給PRIMARY分配大於或者等於一個分區文件大小的空間這樣在交換分區的時候就不用增量為主分區分配數據空間;

   交換舊數據到臨時表使用下面的語句可以把數據交換到相同的分區中編號這樣可以應對臨時表就是一個歷史表而好處就是歷史表也同樣使用了分區

  ALTER TABLE [tb] SWITCH PARTITION @PARTITION_num TO [Temp_tb] PARTITION@PARTITION_num

   這裡需要先修改分區方案才能修改分區函數這個跟創建分區函數與分區方案的順序是剛好相反的

  (圖分區管理表PartitionManage)

  字段說明Change_Value(預警Id值)Part_Value(分區函數值)FileGroup_String(分區文件組名稱)IsDone(狀態)UpdateTime(更新時間);

  這就是那個分區管理表(PartitionManage)它是經過了幾個版本後才把字段確定下來的現在它已經比較完善了能應對比較多的情況

   比如我們可以修改預警值(Change_Value)讓數據提早進入交換分區;

   比如我們可以修改分區值(Part_Value)達到調整分區間隔的目的;

   比如我們可以修改分區文件組名稱(FileGroup_String)達到跳級文件組的目的;通過修改分區管理表來設置分區值與分區文件組的對應關系;

   再比如我們一次性修改了分區方案和分區函數已經去到很後面的分區值了那麼我們只要設置這些分區值的狀態(IsDone)為(True)就可以解決了

   記錄了進行交換分區的時間(UpdateTime)方便查詢;

  (圖分區為Id字段的記錄分布圖)

  這是一個實戰中的分區情況這樣的分區特點就是分區裡面的記錄數基本上是持平的在Partition_num=的記錄中明顯多了很多記錄這就是因為我們沒有及時進行交換分區造成的

  (圖分區為ClassId(分類)字段的記錄分布圖)

  這同樣是另外一個生產環境中的真實數據這個分區方式的特點就是分區的記錄數不太均等而我們前期需要做的就是通過劃分每個分區中ClassId的值來盡量均衡分區中的記錄數所以可以看到最小與最大值跨度區別是比較大


From:http://tw.wingwit.com/Article/program/SQLServer/201311/22352.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.