2013-04-01 30 views
1

我有一個正在處理隊列的SSIS包。 我目前有一個singel包被分成3個容器 1.收集一些元數據 2.做工作 3.重新檢查元數據,更新隊列w /我們認爲發生的事情(成功的失敗風味)SSIS最佳實踐 - 做2件事情中的1件

我對速度不是很滿意,其中一部分是我在倉鼠供電的服務器上運行,但那是超出我的控制。

中間一塊可能提供一個改進的機會... 有20個表可能需要更新。 每個隊列項目將更新1個表格。 我目前有一個包含20個序列容器的序列。

他們都做基本相同的事情,但我無法找出一種方法來抽象他們。

每個中的第一個框是一個空的腳本動作。如果表名匹配,則有一個有條件的流程可用於'膽量'。

所以我打開了20個序列任務,20個空腳本任務,並做了20次T/F檢查。

看着黃色/綠色的燈光,這看起來很慢。

有沒有更高效的方法?我認爲使其更好的唯一方法是在序列容器外部有20個空腳本。可以節省的是打開容器。我不相信打開一個序列容器是很昂貴的。每次都可能重新驗證容器中的每個任務嗎?

只是釣魚,如果有人有任何想法,我會很高興聽到他們。

感謝

格雷格

回答

1

你現在的主要問題是你在BIDS中運行這個。這是爲了使包的開發和調試變得簡單而設計的,所以在你指出的時候它會在運行時驗證所有的對象。另外,「黃色/綠色燈光秀」更適合向您展示包裝運行過程中發生的情況。當您使用DTSExec運行時,或者作爲Sql服務器的計劃任務的一部分,您將獲得更好的性能。你記錄你的包裹嗎?如果是這樣,請從服務器運行並查看日誌以驗證進程在服務器上實際執行的時間。如果在這一點上仍然需要太長的時間,那麼你可以實現一些@註冊用戶的想法。

+0

我很欣賞那一點。事情在服務器上運行得更快。它不是我想要的增長幅度,但它是一個相對較弱的虛擬機服務器(我不參與服務器設置...)。 – greg

1

你運行的每個並行的任務是什麼?如果它必須連續循環所有60個物體,那麼你的主要改進空間就是並行運行每個物體。如果你正試圖並行的過程,那麼你可以做一些解決方案:

  1. 創建所有60個對象,3個對象的每一個鏈。這對於設置來說是勞動密集型的,但它是排除故障中最容易的,並且允許您在必要時對其進行自定義。顯然這不會抽象掉任何東西!

  2. 創建一個父包和一個子包。子包將包含你想要執行的結構。父包包含20個執行包任務。這與1相似,但是它提供了一個優勢,即只有一組代碼需要維護3個任務的序列容器。這可能意味着您將轉向表驅動的元數據模型。如果您正在將數據從一臺服務器傳輸到另一臺服務器,則在SSIS中使用CozyRoc Data Flow Plus任務時可以很好地工作。如果你在同一臺服務器上做所有事情,那麼你實際上可能組織了存儲過程執行,這很容易處理這個模型。

  3. 創建一個使用CozyRoc並行任務和數據流Plus的軟件包。這可以讓你將所有的邏輯封裝在一個包中並且並行執行所有的邏輯。 警告我在SQL Server 2008 R2中嘗試了這種方法並取得了巨大成功。但是,當SQL Server 2012發佈時,由於某些SSIS中的封面更改,CozyRoc並行任務的行爲與以前的版本不同。我將它記錄爲CozyRoc的一個錯誤,但盡我所知該問題尚未解決(截至2013年4月1日)。此外,此模型可能會抽象掉太多的ETL,並且在將來更難以進行初始加載和故障排除單個表格加載。

個人而言,我使用解決方案1,因爲我的任何團隊成員都可以成功實現此代碼。元數據驅動的解決方案很性感,但難以正確編碼。

+0

- 感謝您的建議。這20個序列在父親序列容器內都是平行的。 我已經考慮過子包,但我似乎在執行子包後重新連接到數據庫。我有一個以前的帖子,我試圖調查這個問題。我當時沒有成功,導致了我目前的龐然大物。 (它對於夏至時的派對很有用......帶你的俱樂部......) – greg

1

我可以建議在一個存儲過程中包裝你的20個更新。不知道你的輸入數據有多變,我不知道這是多麼合適,但這是我的第一反應。

+0

感謝您的建議。我發現自己陷入的困境以及我不得不使用SSIS的全部原因是...源數據在oracle中,我們沒有鏈接服務器,所以將它們放在一個SP中是不可取的,除非是Im缺少一些東西...... – greg

+0

那麼你的目標(表格被更新)是Oracle,你的源代碼是其他東西?在這種情況下,不可以使用SP。增加服務器的大小也不會有什麼不同。我不太明白你在做什麼,但是你在更新大桌嗎?您需要更徹底地隔離性能問題 - 即它是UPDATE,腳本還是數據庫?無論如何,你有一個好運氣的答案。 –

1

好 - 這裏是我做過什麼....

我在父序列容器的「頂部」增加了一個虛工。從那我爲每個子順序容器(CSC)添加了20個流程鏈接。現在每個CSC只有在必要時才能打開。

我的吞吐量確實增加了約30%(最小採樣時爲26 rpm - > 34 rpm)。

我可以去w/zmans答案或註冊用戶。兩者都很有幫助。我選擇zmans是因爲真正的答案總是從查看日誌開始,看看究竟需要多長時間(根據我的經驗,綠色/黃色並非真正可靠)。

謝謝