標籤:style blog http io ar color os 使用 sp
一、拆分分區(SPLIT)
在已有分區上添加一個新分區。
如所示,將分區03拆分成03和04分區,拆分方式先鎖定舊03分區的所有資料,後將舊03分區相關資料移轉到分區04,最後刪除舊03上的對應分區資料;這種操作大量消耗io,造成的io日誌讀寫是轉移資料的四倍。因此在管理分區上,一般提前添加分區;例如當前03分區沒有資料的情況下,我們完成04分區的添加。
添加分區步驟:
1、指定下一個分區的檔案組
2、拆分分區
--添加分區USE [PartionTest]ALTER PARTITION SCHEME [pc_PartionTest01] NEXT USED [PartionTest201412]USE [PartionTest];ALTER PARTITION FUNCTION [pf_PartionTest01]() SPLIT RANGE(‘2014-12-11‘)
表示分區添加成功:
二、合并分區(Merge)
分區資料的遷移後,需要分區合并,也就是將無用分區刪除,分區合并同拆分一樣,會造成大量的io消耗;因此通常會將此分區資料切分出去,分區無資料則可以合并相關分區。
由於合并是將兩個分區合并,因此存在是將需要合并的分區界限點往左合并還是往右合并呢?這取決於Range 方式,若Range LEFT 則 往右合并,RANG RIGHT 則往左合并。
通過以上拆分分區得出的分區4,現將分區4合并,有餘Range right分區方式,因此分區4是往左合并,將合并到分區3。以下執行結果可以證明此觀點。
USE [PartionTest];ALTER PARTITION FUNCTION [pf_PartionTest01]() Merge RANGE(‘2014-12-11‘)
通過可以看出:只剩下分區3
四、分區切換(SWITCH PARTITION )
切換分區可以快速有效管理資料子集。可以使用ALTER TABLE …SWITCH PARTITION ..語句。在分區移動時,只是修改相關的中繼資料,並未移動資料;因此切換速度非常快。
切換分區需要符合以下要求:http://msdn.microsoft.com/zh-cn/library/ms191160(v=sql.105).aspx
1、原表與目標表結構必須相同,且必須在同一個檔案組中。
2、目標表或者分區必須是空的。
3、若源表存在聚集分區索引,則要求目標表也需要有同樣的聚集分區索引。
4、源表的所有索引必須與源表分區對齊。
5、若目標表存在索引,約束,外鍵,要求源表必須與目標表相同結構的索引,約束,外鍵。
6、目標表和源表都不能存在複製分發。
7、分割資料行是否可為空白的約束必須相同。
一般切換分區可以做如下處理:
- 將現有表作為分區分配到現有的資料分割資料表。
ALTER TABLE [dbname].[dbo].[tablename] SWITCH TO [dbname].[dbo].[staging_tablename] PARTITION source_partition_number_expression
- 將分區從一個資料分割資料表切換到另外一個資料分割資料表中。
ALTER TABLE [dbname].[dbo].[tablename] SWITCH PARTITION source_partition_number_expression TO [dbname].[dbo].[staging_tablename] PARTITION source_partition_number_expression
- 將一個分區切換到現有表中。
ALTER TABLE [dbname].[dbo].[tablename] SWITCH PARTITION source_partition_number_expression TO [dbname].[dbo].[staging_tablename]
四、$PARTITION
為任何指定的分區函數返回分區號,一組分區列值將映射到該分區號中。
[ database_name. ] $PARTITION.partition_function_name(expression)
/*返回某個值屬於某個分區*/SELECT $PARTITION.pf_PartionTest01(‘2014-12-26 00:00:00.000‘)/*查詢某個分區的所有值*/select * from [dbo].[PartionTest01]where $PARTITION.pf_PartionTest01(salesDate)=2
(四)SQL Server分區管理