Sql-Server

分區切換與模式傳輸

  • March 1, 2021

我正在設計一個數據庫,其數據將由 ETL 每天生成。經過一番研究,我發現可以使用分區切換或模式傳輸來最大化“實時”數據的正常執行時間。僅出於資訊完整性考慮,此數據庫將部署在 Azure SQL 數據庫上,並在 Docker 上的 SQL Server 2019 開發人員版上進行開發。它包含約 20 個表,每個表的行數少於 10M(預期)。

所以現在在我的設計中有兩種模式:

  • [App]:包含多個表(沒有外鍵)以及應用程序使用的實時數據。
  • [AppShadow]:包含與模式完全相同的表[App](但帶有外鍵),通常為空,用作 ETL 的目標。

我的流程如下所示:

  • [AppShadow]使用模式中的表作為目標執行 ETL 。外鍵確保我的數據是一致的。
  • set transaction isolation level serializable; begin transaction;
  • [AppShadow]使用禁用架構中表的所有約束alter table [AppShadow].[<table_name>] nockeck constraint all;
  • 截斷[App]模式中的所有表
  • 將所有表的分區從 切換[AppShadow][App]
  • 使用重新啟用[AppShadow]架構中表的所有約束alter table [AppShadow].[<table_name>] with check check constraint all;
  • commit transaction;

該解決方案似乎工作正常,停機時間最短,但我無法弄清楚使用[Swap]模式和alter schema <schema_name> transfer <table_name>語句在模式之間傳輸整個表的任何優點或缺點。SQL Server 是 SQL Server,我很確定有一些我不知道的隱藏警告應該讓我更喜歡一個解決方案。

你有什麼意見或建議嗎?

你有什麼意見或建議嗎?

您描述的所有操作都是元數據,所以我不希望性能有任何顯著差異。

奇怪的是你沒有外鍵

$$ App $$架構。您已經支付了檢查 DRI 的費用,並且如果您在數據庫中驗證了外鍵,則查詢優化器可以利用它們。 模式轉移將允許您將所有外鍵留在原地。

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