Sql-Server

為報告目的複製表格

  • February 2, 2014

我們在伺服器 A 上的數據庫中有 5 個表,我們希望將它們複製到伺服器 B 以進行報告。我們想在目標副本上創建不同的索引,以便獲得更好的報告性能。我們考慮了以下選項:

  1. Always On 可用性組(SQL Server 2012 的功能):不能使用它,因為它只允許創建源數據庫的只讀副本,即我們不能在每台伺服器上創建不同的索引集。
  2. 事務複製:這看起來很適合實現我們想要做的事情,但是由於我們的表將非常頻繁地更新,因此對伺服器的性能影響預計會很高,我們希望避免任何性能下降。
  3. 每晚快照:這也可以,因為我們不需要始終保持兩個數據庫同步。但這將導致每晚重新創建表,這意味著我們必須每晚也重新創建索引。不能保證它會在一夜之間完成。

我們提出的另一個定制解決方案是一個兩步過程。首先,我們使用 Always ON 方法在伺服器 B 上複製完整的數據庫。然後我們將在伺服器 B 上創建另一個數據庫,我們將通過事務複製方法使用第一個目標數據庫複製到該數據庫。我知道這是到達同一目的地的更長方法,但這使我們能夠避免對伺服器 A 的性能影響。我們不太關心伺服器 B 的性能。這個解決方案聽起來不錯還是我們忽略了任何可能的問題這個解決方案?

我過去曾多次實施解決方案 2,事實證明它非常有效。

不過,您擔心複製表對性能的影響是正確的。您將不得不花時間確保複製不會引起問題。需要考慮的事情是:

  1. 您將在哪里托管分發器 - 對複製表執行的 DML 和 DDL 從發布者(原始表所在的位置)傳遞到分發器。實際命令被有效地複製到單獨的“分發”數據庫中的一組特殊表中。分配器必須足夠強大才能處理這種負載。這可能是與發布數據庫相同的實例,但對於大容量 OLTP 或 OLAP,您可能希望將其擴展到另一台機器。
  2. 您多久對要複製的表進行一次架構更改?架構更改是可能的,但它們可能是複制拓撲中的噩夢。這將使架構更改成為您將來需要更加小心的事情。
  3. 在復製表中插入/更新/刪除了多少數據?複製可以承受非常高的負載,但是您的底層系統需要能夠處理它(這在很大程度上是一個系統架構問題)。由於複製有效地將 DML 和 DDL 複製到第二個數據庫中,因此與沒有複製的相同數據庫相比,您基本上可以將其視為創建雙倍數據(和 I/O 等)。

還有很多事情需要考慮,但這應該讓您快速了解如果您使用解決方案 2 需要考慮什麼。

我們目前使用事務複製來保持數據同步。兩台伺服器都有不同的索引。報告伺服器具有容納數據文件的 fusion io 驅動器。它運作良好。

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