Sql-Server

SQL Server 2016:時態表性能與觸發器和 CDC

  • September 9, 2021

似乎很難在系統版本化的時態表和舊選項(例如 DB 觸發器和 CDC)之間找到比較。我目前沒有時間在 SQL Server 2016 上編寫擴展測試,所以我想我會在這裡問一下。

基本上,觸發器的典型優勢是它們更易於在獨立和集群/alwaysOn 環境中管理,可以實時同步,並且可以訪問會話數據,例如使用者 ID。

另一方面,CDC 雖然需要更多的管理並且是非同步的,但要輕得多,因此性能要好得多。因此,如果有任何疑問,由觸發器引起的瓶頸可能會成為一個問題,CDC 基本上將是更好的解決方案。在硬體要求方面,由於使用日誌和 cdc 審計表來跟踪更改,CDC 對額外空間的要求可以忽略不計。

**問題:**時態表與上述兩個相比如何?在速度、性能、儲存空間使用方面。何時應該使用臨時表而不是觸發器或 CDC?我什麼時候不應該?

我理解任何像數據庫審計背後的業務需求和技術限制這樣潛在復雜的事情都不會有一個簡單的答案,因為它在很大程度上取決於項目的需求和範圍。但是,任何能更清楚地說明上述問題的事情都將不勝感激。謝謝!

(注意,我在 2021 年回到了這個問題,並添加了我所學到的知識作為對原始問題的答案。你會在下面找到它。)

這取決於您的業務案例,時態表和變更數據擷取提供不同的功能。

時態表用於在某個時間點提供表的版本。案例可能是一個緩慢變化的維度,您希望在其中跟踪維度屬性的變化並隨時報告它們。

更改數據擷取可用於 OLTP 表,以便您輕鬆導出到數據集市。它將所有更改記錄到單獨的表中,因此您可以輕鬆查看自上次導出 LSN 點以來更改的行。

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