首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 合併 (刪除) 分區深度解析:RANGE LEFT/RIGHT 邊界值移動規則

     編輯:關於SqlServer

前言

SQL Server 2005+ 引入資料表分區,MERGE RANGE (合併分區) 實際上是刪除一個邊界值,將其所屬分區資料移動至相鄰分區。本文透過六組實測,揭示 RANGE LEFT / RANGE RIGHT 下首值、中間值、尾值合併時的資料移動方向規則。

測試環境共同設定

  • 分區函數邊界值:'20100101', '20110101', '20120101', '20130101'
  • 五個檔案群組:FG1、FG2、FG3、FG4、PRIMARY 對應五個分區。

一、RANGE RIGHT (值屬於右側區間)

初始分區區間:

檔案群組分區號區間範圍
FG11[過去, 2010-01-01)
FG22[2010-01-01, 2011-01-01)
FG33[2011-01-01, 2012-01-01)
FG44[2012-01-01, 2013-01-01)
PRIMARY5[2013-01-01, 未來)

測試 1:刪除第一個邊界值 '20100101'

ALTER PARTITION FUNCTION pf() MERGE RANGE ('20100101');

結果:FG2 合併到 FG1 (右側分區資料移入左側)。
新區間:[過去, 2011-01-01) 落在 FG1。

測試 2:刪除第二個邊界值 '20110101'

結果:FG3 合併到 FG2 (右側移入左側)。

測試 3:刪除最後一個邊界值 '20130101'

結果:PRIMARY 合併到 FG4 (最右側分區資料移入左側)。

二、RANGE LEFT (值屬於左側區間)

初始分區區間:

檔案群組分區號區間範圍
FG11(過去, 2010-01-01]
FG22(2010-01-01, 2011-01-01]
FG33(2011-01-01, 2012-01-01]
FG44(2012-01-01, 2013-01-01]
PRIMARY5(2013-01-01, 未來]

測試 4:刪除第一個邊界值 '20100101'

結果:FG1 合併到 FG2 (左側分區資料移入右側)。

測試 5:刪除第二個邊界值 '20110101'

結果:FG2 合併到 FG3 (左側移入右側)。

測試 6:刪除最後一個邊界值 '20130101'

結果:FG4 合併到 PRIMARY (左側移入右側)。

核心結論:統一規則

被刪除的邊界值屬於哪個分區,該分區即被移除,其資料移動至與該邊界值相鄰的另一個分區。

  • RANGE RIGHT:邊界值屬於右側分區 → 刪除右側分區 → 資料移入左側。
  • RANGE LEFT:邊界值屬於左側分區 → 刪除左側分區 → 資料移入右側。

圖解請見原文兩張示意圖 (右邊界 / 左邊界)。

運維建議

  1. 合併分區屬資料移動操作,會產生大量 I/O 與記錄,務必在低峰期執行。
  2. 合併前評估目標分區剩餘空間,避免磁碟爆滿。
  3. 合併後檢查分區對齊、索引碎片,必要時 REBUILD。

參考資料

  • 實戰分區表:SQL Server 2k5&2k8 系列(三)
  • SQL Server 2005 中的分區表(四):刪除(合併)一個分區
  • 合併分區 (MSDN)

作者:聽風吹雨 | 出處:https://gaizai.cnblogs.com/ | 版權歸作者與博客園共有。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved