2014-01-09 58 views
1

我們有一個SQL Server 2008數據庫。數據庫需要從3個獨立的服務器複製數據。一旦數據被複制,我們會進行數據轉換(解除歸一化等)SQL Server - 在小時間窗口中複製數據和轉換

使用運行在小型夜間窗口(3小時)中的SSIS包複製數據。例如:

  • 作業A運行1-2作業B

    之間

  • 2-3
  • 工作4 2.3
這導致一些問題:

  • 隨着數據的增長,作業A不能完成2,作業B開始並失敗
  • 在某些日子裏,作業在維護之外運行NCE窗口
  • 每個數據複製作業創建一些其他的SQL作業
  • 得到的SQL作業發生衝突導致的錯誤,我想解決這個問題是

一種方式 - 通過具有獨立的臨時數據庫,它將整天覆制數據,然後將SQL複製設置爲生產數據庫。

我們還需要一個排隊系統,以便作業可以具有優先級,依賴關係等,因爲有些作業是連續的,有些可以並行運行。

有沒有其他更好的方法來解決這個問題?任何幫助我們的選擇將不勝感激。

+1

你可能想要實現某種代理鏈接 - http://dba.stackexchange.com/questions/3605/chaining-sql-server-agent-jobs – OnoSendai

+0

我同意OnoSendai。如果服務器核心允許,儘快使用Parallelism(可能的話):http://technet.microsoft.com/en-us/library/dd795221(v=sql.100).aspx –

回答

0

您能發佈有關此聲明的更多信息嗎?

「隨着數據的增長,作業A不能完成2,作業B啓動失敗」。

您的錯誤消息的詳細列表將有所幫助。我想知道的是...

1)你的錯誤是由於硬件資源的限制嗎?

2)它可以通過在SSIS加入Precedence Constraints到你的包來解決?

3)都發生了嗎?

如果我承擔,這個問題的一部分,至少可以通過在SSIS包添加優先約束,往往一個跑進情況需要解決的時刻是這樣的:

我有細上運行的幾個包他們自己就像是單獨運行時一樣。然而,當他們一起跑時,他們並不會很好地相處。還有什麼我真的沒有心情,也沒有時間我需要重新設計/重構這幾個包作爲一個具有所需優先約束的大包。

發生這種情況時,該解決方案提出了自己:

  1. 創建一個新的「父」包
  2. 添加Execute Package tasks到父包打電話給你的孩子包
  3. 使用優先約束,約束每個孩子軟件包運行的硬件資源允許和數據模型要求的並行度如下或更少

This Parent pa ckage將在其中有沒有數據流任務。而是唯一的目的是管理控制流程邏輯。如果這給了你所需要的性能,而不是簡單地將它用作真正需要完成的包重構的工作,那麼這是一個可行的選擇。確定這是一個試驗和錯誤的問題,以使其「正確」。

一般來說,我會說我比較喜歡把複雜的SQL Server代理作業作爲主控制包,因爲我覺得SSIS配置比較簡單,給你更多的靈活性,這種方法允許你封裝你的ETL邏輯在SSIS中,而不是通過SSIS和SQL Server Agent進行分發。對於我的很多ETL任務,我對SQL Server代理的使用已經歸結爲調度和一個調用控制流主題Parent包的簡單步驟。

我想說,使用單獨的臨時表作爲解決問題的一種方法也值得研究。這是數據模型專家最關心的一個數據模型問題。如果您當前的數據模型不允許並行運行包,那麼該方法可以提供幫助(例如,多個進程通過批量插入將數據同時插入到同一個表中)。但是,如果性能的根本問題是硬件資源約束,那麼多個臨時表解決方案並不是一個好選擇。

我想最終會找到最佳性能,您可能最終會使用這兩種解決方案的混合,並可能爲您的ETL請求額外的硬件資源。

很難知道什麼建議沒有更多的細節問題。希望這可以幫助。