Sql-Server

保留完全刷新數據源

  • February 28, 2021

我有一個 SQL Server 數據庫,它每週都會使用一組全新的數據進行更新。

我目前正在使用兩個暫存數據庫。一系列視圖數據庫正在連接到這些視圖數據庫,一周視圖表的視圖指向其中一個暫存數據庫中包含的一組表,然後在另一周刷新數據的攝取完成時更改視圖. 在每次載入之前都會截斷登台表。有 12 個表,範圍從 50Gb 到 100Gb。

這是為了避免人們等待漫長的攝取完成並讓人們繼續工作。

有沒有更有效的策略?在 Oracle 中,我會將物化視圖轉換為表,然後在攝取完成後刷新視圖。

我認為 SQL Server 沒有類似的策略。我正在使用 SQL Server 2016 企業版。

ALTER TABLE … SWITCH允許您在要更改“實時”表時切換每個表。唯一的要求是確保切換中涉及的兩個表在同一個文件組中,並且具有相同的結構。

因此,您剛剛讓我意識到,由於 Oracle 中的依賴關係解耦,靜態 物化視圖有一個案例,從而減少了諸如您自己的場景中的鎖定問題。(雖然當您在 Oracle 中刷新物化視圖時,我不確定它的過程與載入第二個臨時表相比性能如何?)

我同意 MBuschi 研究分區分區切換的想法,這將允許您只維護一個表。

我的另一個想法是,您可以使用而不是 View 來控制最終使用者的活動表,您可以使用Synonym代替。它與使用視圖沒有太大區別,除瞭如果表的架構發生更改,您不必擔心管理同義詞中的更改,它將始終引用表的最新架構。這與僅SELECT *在您的視圖中做的有很大不同嗎?…可能不是,但是同義詞實際上不包含程式碼,它只是同義詞名稱與其引用的實際對象之間的指針,因此管理較少/重量較輕一種感覺。

您也可以只依賴兩個表,當非活動表完成載入最新數據時,您可以使用sp_rename它立即切換錶名並切換哪個是活動的,哪個不是活動的。

如果我想到任何其他想法,我會更新我的答案,但我認為 MBuschi 在這個問題上為您指明了正確的方向。

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