2013-03-19 80 views
17

我有一個數據流任務掛在執行之外。
流程很簡單,對不同的表格進行兩次查詢(兩次都有一對連接),然後通過一個公共ID對otuputs進行排序和合並,向所有記錄添加一個靜態列,將行計數保存在一個用戶變量中以備後用,最後插入另一個數據庫的表格中。 我們正在使用OLE DB來源和目標。來源是MSSQL 2000和目標是MSSQL 2012

症狀:
SSIS數據流任務掛起執行Pre-excecute階段

  • excecuting時,數據流是那些常見的黃色的「運行」圖標。但是,當您雙擊查看數據流時,其中的非元素都會有黃色,紅色或綠色標記。
  • 這會持續很長一段時間,起初它持續約20分鐘,然後開始變長或根本不回來。
  • 輸出顯示:
    信息:0x40043006位於加載沙箱表,SSIS.Pipeline:準備執行階段開始。
    信息:加載沙箱表中的0x40043007,SSIS.Pipeline:預執行階段開始。

    直到停止執行爲止。
  • 是的,這已經工作過。是的,我們使用單個查詢(在存儲過程中)來執行此ETL,但我們希望將所有步驟遷移到SSIS。
  • 失敗的解決方案:

  • 沒有查找。
  • 的任務流程默認緩衝區大小增加到40485760再到80971520.
  • 默認的緩存器MAX行的任務是要1000000
  • 延遲驗證設置爲true的任務。
  • 任務內的所有元素都被設置爲驗證外部數據爲False。
  • 這兩個查詢都有:
    SET FMTONLY OFF;
    SET NOCOUNT ON;

    在開始時添加。
  • 兩個查詢有 MAXDOP設置爲1
  • 項目的運行64位運行時設置爲False。
  • 更改目標負載從表或視圖表或視圖 - 快速加載沒有鎖定或約束。
  • 將快速加載的每批次行數設置爲1000。
  • 一些解決方案建議將任務流分成兩個或更多任務流。但這是不可能的,因爲我們需要做的是合併源查詢中的信息。
  • 額外位: 我真的很希望有人能幫助我。我對SSIS相當陌生,這是我第一次使用它。我通常與Pentaho一起爲我的ETL工作,但客戶需要在SSIS上實施解決方案。我已經爲這個問題爭論了幾天,現在我開始用盡想法來解決它。


    當通過命令行就卡住過跑,我得到下面的輸出:

    Progress: 2013-03-19 14:36:26.21 
        Source: Load Sandbox Table 
        Validating: 0% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.21 
        Source: Load Sandbox Table 
        Validating: 12% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.22 
        Source: Load Sandbox Table 
        Validating: 25% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.22 
        Source: Load Sandbox Table 
        Validating: 37% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.23 
        Source: Load Sandbox Table 
        Validating: 50% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.25 
        Source: Load Sandbox Table 
        Validating: 62% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.25 
        Source: Load Sandbox Table 
        Validating: 75% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.25 
        Source: Load Sandbox Table 
        Validating: 87% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.25 
        Source: Load Sandbox Table 
        Validating: 100% complete 
    End Progress 
    Warning: 2013-03-19 14:36:26.26 
        Code: 0x80047076 
        Source: Load Sandbox Table SSIS.Pipeline 
        Description: The output column "ITEM_OID (1)" (47) on output "Merge Join Outp 
    ut" (28) and component "Merge Join" (11) is not subsequently used in the Data Fl 
    ow task. Removing this unused output column can increase Data Flow task performa 
    nce. 
    End Warning 
    Progress: 2013-03-19 14:36:26.27 
        Source: Load Sandbox Table 
        Prepare for Execute: 0% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.27 
        Source: Load Sandbox Table 
        Prepare for Execute: 12% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.27 
        Source: Load Sandbox Table 
        Prepare for Execute: 25% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.27 
        Source: Load Sandbox Table 
        Prepare for Execute: 37% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.27 
        Source: Load Sandbox Table 
        Prepare for Execute: 50% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.27 
        Source: Load Sandbox Table 
        Prepare for Execute: 62% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.27 
        Source: Load Sandbox Table 
        Prepare for Execute: 75% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.27 
        Source: Load Sandbox Table 
        Prepare for Execute: 87% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.27 
        Source: Load Sandbox Table 
        Prepare for Execute: 100% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.31 
        Source: Load Sandbox Table 
        Pre-Execute: 0% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.31 
        Source: Load Sandbox Table 
        Pre-Execute: 12% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.31 
        Source: Load Sandbox Table 
        Pre-Execute: 25% complete 
    End Progress 
    Progress: 2013-03-19 14:36:26.34 
        Source: Load Sandbox Table 
        Pre-Execute: 37% complete 
    End Progress 
    Progress: 2013-03-19 14:36:45.69 
        Source: Load Sandbox Table 
        Pre-Execute: 50% complete 
    End Progress 
    

    ,它再次凍結後。

    SOLUTION(在這裏張貼這一點,因爲我不能回答我的問題了另外5個小時,當我允許我會做到這一點。)
    我終於得到它。
    事實證明驗證存在問題,但不僅如此問題的第四個失敗解決方案中所述,SSIS元素會經過驗證。
    連接也得到驗證,並有自己的延遲驗證屬性,該屬性需要設置爲true。
    之後執行時間從40+分鐘或不運行到整個過程不到一分鐘(這只是一個更大的過程的一個步驟)
    我希望有這個問題的人可以很容易地找到這個解決方案因爲有很多人遇到這個問題,幾乎沒有解決方案在網上發佈。

    一言以蔽之:檢查,參與任務的所有元素,包括 DB連接有延遲驗證屬性設置爲true。

    +1

    如果您不從Visual Studio的上下文中運行它,會發生什麼情況?在命令行中,'dtexec.exe /文件C:\ somepath \ Package.dtsx' – billinkc 2013-03-19 19:47:49

    +0

    謝謝,我沒有想過這個。它再次卡住了,雖然輸出看起來很奇怪。 輸出對於評論太長,我將編輯問題並將其添加到那裏。 – Ryoku 2013-03-19 20:51:26

    +0

    你可以在其所有的texty榮耀發佈輸出嗎? – billinkc 2013-03-19 20:54:19

    回答

    8

    我終於明白了。 事實證明驗證存在問題,但不僅如此問題的第四個失敗解決方案中所述,SSIS元素會經過驗證。 連接也得到驗證,並有自己的延遲驗證屬性,該屬性需要設置爲true。 之後執行時間從40分鐘或不運行到整個過程不到一分鐘(這只是一個更大的過程的一個步驟) 我希望有這個問題的人可以很容易地找到這個解決方案,因爲有很多人遇到這個問題,幾乎沒有在網上發佈解決方案。

    簡而言之:檢查您的任務中涉及的所有元素,包括數據庫連接的延遲驗證屬性是否設置爲True。

    +0

    這僅僅是我的dtsx需要滾動的後面的一腳。它在Visual Studio中調試時掛起 - 在更改所有驗證設置後,它工作得很好! – Sev09 2016-01-21 17:51:49

    0

    幾分鐘前我遇到了同樣的問題,上面的建議對我無效(延遲驗證= true似乎是要回答的問題)。最近我們發現了一些參數嗅探的問題,一旦我在我的存儲過程中修復了這個問題,我的軟件包在1分鐘內運行在<。考慮檢查你的存儲過程,看看這是否是原因。

    +0

    謝謝! 實際上,我們刪除了所有存儲過程併爲它們創建了SSIS步驟。但是我們的問題是通過延遲對連接的驗證而不是SSIS元素來解決的。 – Ryoku 2013-03-25 20:33:54

    2

    通過將數據訪問模式更改爲SQL命令並將我的視圖粘貼到OLE DB源中的SQL命令文本中解決了我的問題。

    1

    顯然,嘗試的另一件事是檢查「使用32位運行時」複選框 - 這是如果在將數據包作爲作業運行到數據庫服務器時發現問題(即64位,並且在我的情況下,至少,SQL Server 2008 R2)。轉到作業,右鍵單擊>屬性...>步驟>右鍵單擊您的SSIS包步驟>屬性...>常規>執行選項(選項卡)>使用32位運行時。

    我看到這個問題,但只有一次我將包部署到服務器(我有一個日誌提供程序啓用,所以我可以看到它在「預執行」階段後卡住)。它在BIDS中總是運行良好(並且在另一臺服務器上很好,但很奇怪......仍然不確定這是爲什麼)。

    線程here讓我感覺這個解決方案似乎可行 - 儘管我的問題是間歇性出現的,所以YMMV。該線程還有其他可能的解決方案。

    +0

    這也適用於我 - 謝謝。它通常是解決方案! – 2015-09-16 17:33:57

    3

    我得到了同樣的症狀,但將延遲驗證設置爲True,每個組件都沒有解決我的問題。

    我通過將OLE DB方法從表或視圖更改爲sql命令來解決此問題。

    關於。

    1

    希望這可以幫助別人。 我試圖用這個OLE DB源來執行一個參數的SP。 我不需要它來返回任何東西,所以我把這部分留下了。 但它不會讓我,它喊'沒有列信息是由SQL返回'。所以在我的SP中配置了一個虛擬的sql語句,我將其設置爲從不真實。 但它從未將該列作爲輸出並且該作業僅停留在預執行階段。所以我改變了這個測試總是真實的,它返回了專欄,並且暴跳如雷。我對這個專欄沒有做什麼,但我想這是需要的。

    0

    我們已將我們的延遲驗證設置爲True,並且不希望將其更改爲SQL語句。
    我在數據流中遇到了ValidateExternalMetadata,我將其更改爲False,似乎像冠軍一樣工作。

    我查了OP的步驟,他提到,他們這樣做,在步驟5

    1

    我知道這是舊的,但我只是發現了一個關於這個,可以幫助鏈接。我個人正在使用視圖來將數據導出到外部數據庫,並且數據驗證正在花費過多的時間來驗證視圖。

    https://connect.microsoft.com/SQLServer/feedback/details/258901/ssis-views-as-data-source-very-poor-performance-or-ssis-hangs

    這樣做的重要組成部分,是微軟的答案

    發佈Microsoft在4/28/2008下午2:45

    這是一個已知問題和結果目前的設計。

    有2種方法從在OLE DB源的視圖拉數據:

    1. 使用「表或視圖」訪問方法

    2. 使用「SQL命令」存取方法,並輸入查詢「select * from ***」

    在兩種方法中生成不同的執行計劃。

    前者使用的效率不如後者高。

    如果在使用第一種方法時遇到性能問題,則可以切換到第二種方法作爲解決方法。

    我們也在這個問題上做了博客 - >http://blogs.msdn.com/sqlperf/archive/2007/04/29/set-up-ole-db-source-to-read-from-view-efficiently.aspx

    由於這是一個'按設計'項目,我們相信有一個解決辦法,我們目前不會提供任何更改。因此,我們正在關閉與您提交相關的案例。如果您不同意,請隨時重新提交。

    我們感謝您的時間,精力和對SSIS的支持。

    0

    此問題在SQL Server 2012/2014中仍然有效。

    上述解決方案都沒有幫助。實際上,沒有任何更改延遲驗證,更改OLD DB目標或OLE DB連接的配置。

    閱讀從這個鏈接線:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/35a484c7-4850-4f86-b14a-5dfb50491ab2/long-duration-preexecute-phase?forum=sqlintegrationservices

    ,建議,問題是執行計劃。

    這是我的情況,並添加一個條件1 = 1到我的OLE DB源配置強制SQL服務器生成一個新的執行計劃,爲我解決了這個問題。