SQL Server 平行資料倉儲(PDW)使用暫存資料庫,在載入過程中暫時儲存資料。 預設情況下,SQL Server PDW 會將目的資料庫作為暫存資料庫,這可能導致資料表碎片化。 為了減少資料表碎片化,你可以建立一個使用者自訂的暫存資料庫。 或者,當載入失敗後的回滾不是問題時,你可以使用 fastappend 載入模式,跳過暫存資料表,直接載入目標資料表來提升效能。
暫存資料庫基礎知識
暫存資料庫是使用者建立的 PDW 資料庫,在資料載入設備時暫時儲存。 當負載指定一個暫存資料庫時,設備會先將資料複製到暫存資料庫,然後將暫存資料從暫存資料庫中的資料複製到目的資料庫中的永久資料表。
當載入未指定分階段資料庫時,分析平台系統(PDW)會在目的資料庫建立暫存資料表,並用它們儲存載入的資料,然後再將載入的資料插入永久目的資料表。
當載入使用 fastappend 模式時,Analytics Platform System(PDW)會完全跳過暫存資料表,直接將資料附加到目標資料表。 快速附加模式提升了 ELT 情境下的載入效能,因為從應用程式的角度來看,資料加載到的是暫時性資料表。 例如,ELT 程序可以將資料載入暫存資料表,透過清理與去重處理資料,然後將資料插入目標事實表。 此時,PDW 不必先將資料載入內部暫存資料表,再將資料插入應用程式的暫存資料表。 快速附加模式避免了額外的載入步驟,這大幅提升了載入效能。 要使用 fastappend 模式,必須使用多重交易模式,也就是說,從失敗或中止載入的恢復必須由你自己的載入流程來處理。
分階段資料庫的好處
暫存資料庫的主要好處是減少資料表碎片化。 若未使用暫存資料庫,資料會載入目標資料庫中的暫存資料表。 當暫存資料表在目的資料庫中建立並刪除時,暫存資料表與永久資料表的頁面會交錯排列。 隨著時間推移,資料表碎片化會造成效能下降。 相較之下,暫存資料庫確保暫存資料表的建立與丟棄在與永久資料表不同的檔案空間中。
暫存資料庫資料表結構
每個資料庫資料表的儲存結構取決於目的資料表。
對於載入到堆狀或叢集 columnstore 索引的數據,暫存表是一個堆狀表。
對於載入到列存儲叢集索引的數據,暫存表是列存儲叢集索引。
許可
需要在預備資料庫上具有 CREATE 權限(用於建立暫存資料表)。
建立暫存資料庫的最佳實務
每個設備應該只有一個暫存資料庫。 暫存資料庫可以被所有目的地資料庫的所有載入作業共享。
暫存資料庫的大小依客戶而異。 最初,在首次填充設備時,暫存資料庫應足夠大以容納初始載入工作。 這些負載工作通常很大,因為多個負載可能同時發生。 初始載入工作完成且系統進入生產後,每個載入作業的大小通常會變小。 當負載較小時,你可以縮小暫存資料庫大小以容納較小的負載大小。 若要縮減容量,您可以刪除暫存資料庫,然後以較小的大小配置重新建立,或者使用 ALTER DATABASE 陳述式。
建立暫存資料庫時,請遵循以下指引。
複製的表格大小應該是每個計算節點對所有會同時載入的複製表格的估計大小。 容量通常為 25-30 GB。
分散式資料表的大小應是預估的每個裝置中所有會同時載入的分散式資料表的大小。
日誌大小通常與複製表大小相近。
Examples
答: 建立暫存資料庫
以下範例建立一個暫存資料庫 Stagedb,用於設備上的所有負載。 假設你估計有五個大小為 5 GB 的複製資料表會同時載入。 這種同時性導致複製容量至少分配 25 GB。 假設你估計六個分布式資料表大小分別為 100、200、400、500、500 和 550 GB 會同時載入。 這種並行性導致分散式資料表大小至少分配 2250 GB。
CREATE DATABASE Stagedb
WITH (
AUTOGROW = ON,
REPLICATED_SIZE = 25 GB,
DISTRIBUTED_SIZE = 2250 GB,
LOG_SIZE = 25 GB
);