在這裏multitheading是問題: 我使用VisualCron運行SQL Server 2008 R2上一個SSIS包。 SSIS包將運行一個查詢,獲取數百萬行並將其輸出到平面文件中。有時,我發現當我運行這個SSIS包時,sql服務器不使用多線程(我可以從活動監視器中得知),這會導致運行時間很長,大約需要20個小時。但是,如果使用多線程,可以在8分鐘內完成。SQL服務器強迫執行SSIS包
有沒有辦法強制SQL Server使用時,它在運行這個SSIS包多線程?
在這裏multitheading是問題: 我使用VisualCron運行SQL Server 2008 R2上一個SSIS包。 SSIS包將運行一個查詢,獲取數百萬行並將其輸出到平面文件中。有時,我發現當我運行這個SSIS包時,sql服務器不使用多線程(我可以從活動監視器中得知),這會導致運行時間很長,大約需要20個小時。但是,如果使用多線程,可以在8分鐘內完成。SQL服務器強迫執行SSIS包
有沒有辦法強制SQL Server使用時,它在運行這個SSIS包多線程?
有優化您的查詢處理多個同時操作......或至少提高性能的幾個選項。
問題越來越清楚。
這與sql如何決定使用串行執行計劃或並行執行計劃有關。這是優化者的工作。事實證明,我在VisualCron中有兩個計劃運行的任務,它們都將運行相同的大查詢。不同的是他們會得到不同的輸入參數。
第一個得到的參數不會處理太多的數據。
第二個獲取處理大量數據的參數。
我假設SQL優化器首先看到提交的查詢,查詢不會得到太多的數據,因此它決定使用串行計劃。
我猜這個相同的查詢計劃被緩存,所以當它檢查第二提交的查詢,優化器可能會檢查高速緩存,看看是否有過去評價此查詢計劃的存在。那麼,如果它存在,它就會使用它。 這就是爲什麼它仍然選擇使用第二個查詢的序列計劃。
我改變了兩個任務的順序(我執行的是先處理更多數據的處理,然後是處理更少數據的處理),它可以工作,現在它們都使用並行計劃。 (您可能需要重新啓動實例,以清除緩存的執行計劃)
優化程序的工作原理仍然是我的假設。
其他人的帖子,解釋如何優化正在發揮重要作用,在這裏
http://sqlblog.com/blogs/paul_white/archive/2011/12/23/forcing-a-parallel-query-execution-plan.aspx
你這裏說的是正確的大部分。感謝您的回答。我在底部發布我的解決方案。 –