Sql-Server

TSQL - 線上合併分區

  • July 19, 2017

我的問題的簡短版本是:“在兩個分區的合併過程中,整個分區表都被阻塞了。我怎樣才能訪問不受合併影響的部分以進行讀寫?”

和上下文:

我正在處理非常常見的場景 - 有一個以線性方式增長的生產表(每 5 分鐘有幾百行)。但我們不必將歷史數據保持線上,因此我們決定使用分區從數據庫中“咬”出歷史尾部,並將其移動到另一個數據庫中。

有很多教程如何實現這個目標——創建分區函式、方案、使用索引對錶進行分區、將分區切換到相同的空表等等。如果我想再做一次,“標準”方法是拆分目前分區並將其尾部與歷史分區合併。

現在我想要結束(範例):表T由某個整數列P分區。假設目前有三個分區和三個文件組。分區函式設置為按值 30 和 60 拆分。產生P列值的“計數器”的目前值為50。因此分區 1 (HISTORY) 中有一些行現在是只讀的,一些分區 2 (PRIMARY) 中獲取定期插入和空分區 3 (FUTURE) 的行。

設計數器的值為 70。現在分區 1 和分區 2 處於相同的情況。它們都是只讀的。插入以僅屬於分區 3的P值傳入。現在我想合併分區 1 和 2 並將結果移動到另一個數據庫。但我可以看到,在這兩個分區的合併過程中,表T的所有操作都被阻止了。即使是 INSERT 到第三個分區或者有匹配分區函式的選擇謂詞。我如何設置方案或其他方法以僅從分區 3中解鎖具有P值的 SELECT/INSERT (這在合併方面不適用)?

我使用一個簡單的解決方法解決了這種情況(與 DanGuzman 的評論非常相似)。

當且僅當兩個分區都為空時,合併分區是眨眼操作。當分區函式定義為RANGE RIGHT時,在合併過程中,最左邊的分區將吃掉右邊的另一個。因此,所有記錄都必須在分區文件組之間移動。解決方法是重建或簡單地刪除並重新創建臨時表 - 與源分區表具有完全相同架構的表。唯一的區別是非分區表的文件組,它的索引必須與要合併的分區的文件組匹配。這減少了兩個操作 - 分區切換和分區合併僅是元數據操作。QED。

引用自:https://dba.stackexchange.com/questions/179962