共用方式為


微調您企業中的 SSIS 封裝資料流程 (SQL Server 影片)

適用於:Microsoft SQL Server Integration Services

作者:David Noor,Microsoft Corporation

長度: 00:15:50

檔案大小: 68.1 Mb

檔案類型:WMV 檔案

觀看此影片

相關說明主題:

CAST 和 CONVERT (Transact-SQL)

如何:針對查閱轉換建立及部署快取

如何:使用快取連接管理員以完整快取模式實作查閱轉換

改善資料流程的效能

資料表提示 (Transact-SQL)

TRUNCATE TABLE (Transact-SQL)

了解同步和非同步轉換

相關文件和部落格文章:

使用 Windows 擴充高網路流量 (英文)

SQL Server Integration Services 十大最佳作法 (英文)

資料載入效能指南 (英文)

其他影片:

測量與了解您企業中的 SSIS 封裝資料效能 (SQL Server 影片)

了解 SSIS 資料流程緩衝區 (SQL Server 影片)

設計 SSIS 封裝採用平行處理原則 (SQL Server 影片)

影片摘要

本影片將說明如何提升 Integration Services 封裝中的資料流程效能,您將可透過本影片,學會微調下列的資料流程階段:

  • 擷取
  • 轉換
  • 載入

您可以在設計、開發和執行資料流程時,應用這些效能微調訣竅。

影片致謝

謝謝 Thomas Kejser 對本系列「SQL Server 系列影片:SSIS 之效能設計與微調」在使用材料上的貢獻。本影片是這一系列影片中的第二部。

謝謝 Carla Sabotta 和 Douglas Laudenschlager 的指導與寶貴意見。

影片內容

影片時間戳記 音訊

00:00

嗨,我是 David Noor,Microsoft SQL Server Integration Services 的資深開發組長。歡迎您觀看本影片,我們將說明如何微調您企業中的 SSIS 封裝資料流程。

本影片是「SSIS 之效能設計與微調」影片系列中的第二部,本系列共有四部影片。在這系列的第一部份,Denny 為您解說了如何測量並了解 SSIS 封裝的效能。而在本影片中,我們將更進一步為您說明如何提升 SSIS 封裝資料流程的效能。首先我們要認識每個資料流程共同具備的主旨,以及在嘗試提高效能時,該如何選擇優先微調資料流程的哪個部分。只要了解效能問題的癥結所在,您便可以利用許多方式處理,讓資料流程執行的更快、更有效率。我們還會說明一系列的特殊訣竅,方便您在設計、開發甚至執行資料流程時應用。

讓我們開始吧!

大部分封裝資料流程著重的是擷取、轉換和載入關鍵資料,這有時又稱為 ETL。而微調您的資料流程,就是指一一微調資料流程中的這些階段:擷取、轉換和載入。

針對擷取,我們會說明如何微調 SSIS 來源元件以及它們執行的查詢,以便發揮最佳效能,並將對來源系統的影響降至最低。

微調您資料流程中的轉換是指要檢查您所需完成的工作,並選擇最適當的方法來完成這些工作,像是移除不必要的步驟,有時也要去變更原始的來源查詢,讓它來進行轉換。

最後,微調您資料流程的載入,則是指微調 SSIS 目的地、網路、鎖定,以及會在資料流程載入資料到目的地時妨礙進度的其他因素。

在本影片中,我們會說明一些實用的訣竅,教您如何在資料流程的這三個階段中,找出可以微調的地方。

在我們與您分享這些訣竅之前,請您一定要記住,沒有任何秘方可以解決效能問題。這些訣竅的任何一個都不可能完全解決您資料流程遇到的所有效能問題。我們建議的這些訣竅在一般狀況下都能發揮良好的功用,但建議您不要只運用一大堆訣竅解決問題。不論是什麼狀況,最好的作法就是要全盤了解資料流程的目的,確認其設計完善可以達到這些目標、測量流程目前的效能並且反覆地變更資料流程,再測量這些變更能否改善效能。

此外,在檢查效能問題時,往往很容易執著於特定的某個技術或元件,這有時是因為您對技術或程式碼的熟悉度所導致。但不管原因為何,請盡量從整個生態系統的角度來思考資料流程的問題,尤其是多個關聯式資料庫、網路、作業系統、檔案系統等許多東西。您對整個生態系統的了解越多,就越能全盤掌握每個環節所面臨的實際效能挑戰,也就更能做出有效果又低風險的變更。

03:38

我們就從資料流程的起點,也就是擷取這個階段開始吧。在使用 SQL Server 或任何介面繁複的其他資料庫作為來源時,您應該試試漸漸提高封包大小。一般而言,SQL Server 的預設值 4096 通常能有不錯的結果,但因為您擷取的資料量將越來越大,提高這個數值應該會有助效能提升。為了實行這種作法,您可能要請網路管理員幫您的網路啟用「Jumbo Frame」(巨型封包),但您也應該測試這個功能對您封裝的影響。如果不管是大量作業 (例如 OLE DB 來源) 或是單一資料列作業 (例如 OLE DB 命令),您都是使用同一個連接管理員,不妨考慮建立第二個連接管理員並採用較低的封包大小供 OLE DB 命令作業使用。

請注意,如果您的 ETL 執行於 Windows 2008,同時您使用的是具有多個 NIC 的多核心電腦,便可將網路卡相似化到各個核心,取得稍微好一點的網路效能。進一步資訊,請參閱 MSDN 網站上篇名為<使用 Windows 擴充高網路流量>(英文) 的部落格文章。

在檢查如何微調擷取時,最簡單的一項就是微調您使用的查詢。有時為了簡便,您可能會直接選取所需的資料表,並從中擷取所有的資料行就行了,不過要是能只選取您真正需要的資料行,所得的效能與結果會遠優於前者。因為後者的結果不但能使用更少的網路流量和記憶體,同時資料庫伺服器也只需較少的 I/O 便可完成您的查詢。

正如這裡所示,對 SQL Server 而言,您也可以利用提示,指明在執行選取項目時不要發出任何共用鎖定,這樣您的查詢就會讀取可能的未認可資料 (又稱中途資料)。請在您真的需要擁有最佳效能時,才使用這種作法,同時也要確認讀取中途資料對 ETL 工作不會有任何不良影響。

您可以把查閱視為擷取或轉換,但不管是哪種方式,您都應該運用我們在前一張投影片中說明的概念。這裡更重要的是只選取您所需的資料行,這不但是為了最佳化網路使用,更是為了享有最佳的記憶體內部快取。

如果您使用的是 SQL Server 2008,有個有助效能的絕佳功能可用,就是加入一個共用查閱的新快取。共用查閱快取能讓您一次提取您的參考資料,並讓之後封裝中的多個查閱作業重複使用這些資料,甚至還可將快取儲存到檔案,方便多個封裝共用這些資料。如果您有多個參考相同資料表的查閱元件,不妨進一步了解這個新選項,利用它大幅提升封裝的執行速度。這個選項的使用非常簡單,先在封裝中建立快取連接管理員,利用新快取轉換擴展快取,然後再將查閱變更為使用這個快取連接擷取參考資料。

06:29

接著我們來看看 ETL 的第二階段:轉換。在轉換中,您所處理的資料已經載入到資料流程中,並試著要在載入前將它轉換成正確的格式。在 SSIS 中,每個轉換會顯示為可以拖曳到設計中的物件,但並非所有的轉換都一樣。我們先來看看存在於 SSIS 中的三種轉換:

  • 同步或資料列轉換是在就地資料的緩衝區上運作。這些轉換並不會隨著流程進展而製作資料緩衝區或資料列的複本,而是直接轉換緩衝區中的資料,這也使得同步轉換變得頗為快速。同步轉換的範例包括資料轉換、衍生的資料行,以及查閱。
  • 部分封鎖的非同步轉換則不是這樣。當資料進入這些轉換時,轉換必須保留這些資料才能執行它的工作,所以這類轉換會將內送資料複製到內部緩衝區中,因此會耗用記憶體,有時甚至會耗用很多。隨著資料繼續隨流程流入,這類轉換才會知道可以繼續進行,並寫入輸出資料,等這麼做之後,它們才會釋出之前所保留的對應內部記憶體。一旦資料流程結束,它們便會釋出所有使用的記憶體。但在結束之前,它們通常會耗用不少的資料量。
    這種轉換類型的範例包括合併)、MergeJoin (合併聯結) 和 Union All (聯集全部)。如果您的資料流程中有這類轉換,請試著找出最佳化的作法。它們是否有重複的複本?是否有可以「往回推送」到來源系統的合併聯結或聯集轉換?我過去曾經看過一些封裝,它們不是在來源查詢中執行 JOIN,而是使用 OLE DB 來源從兩個資料表中提取所有的資料,然後再在封裝中使用 [合併聯結] 來執行聯結。但其實他們大可以在來源中寫一個 SQL 連結就行了,而且因為資料庫可以最佳化該查詢,所以執行的速度會快很多。所以請檢查是否有這樣的機會,能合併並減少非同步轉換的數目。
    我們在 SQL Server 2008 的資料流程工作排程器上下了很多功夫,能讓複雜的資料流程更容易執行,並更充分地使用可用的 CPU。如果您是從 SQL Server 2005 開始使用 SSIS,您可能已在資料流程中加入 Union All (聯集全部) 轉換,自行分割並平行處理執行樹狀目錄。您再也不必這麼做了。因為我們對 SQL Server 2008 做了諸多改善,因此不再需要也不建議您這麼做。請移除這些自行加入的 Union All 元件,相信您應該可以體驗到更優良的效能表現。
  • 第三種轉換,也就是封鎖非同步轉換,可說是前一種類型的極端版本,在寫入任何輸出資料前,它們必須保留「所有」的輸入資料。在資料流程中使用這種轉換處理大批資料,往往會大幅降低資料流程的進行速度。因此如果要在大型資料流程中使用這種轉換,請確認沒有重複使用這些轉換。如果您在同一個流程中,對同一個資料有兩個彙總或兩個排序,請重新設計封裝,試著將它們減少為一個。

說明完基本概念後,接著要來介紹一些特殊訣竅:

  • 資料流程經常需要轉換資料行的資料類型,請盡量試著一次完成這項工作,並盡量使用最少的類型,保持資料緩衝區的精簡。轉換資料也會佔用 CPU 時間,所以如果您可以在整個資料流程中的特定資料行使用一種類型,不妨考慮使用 SQL 的 CAST 或 CONVERT 函數,或您資料庫中等同此函數的 SQL 用語,在資料來源中轉換該資料行。
  • 我曾在前幾張投影片中提到過這種作法,但您應該要明智地考量轉換的走向來最佳化轉換,同時要勇於在來源中利用 SQL,發揮更多優點。例如,如果您要排序您的來源資料,不妨往上一層來想,在來源中使用 SQL 的 ORDER BY 子句。您資料庫傳回排序好資料的效率,可能會比在資料流程中排序來得更好。您可以在需要排序合併自多個來源的資料時,再使用這類排序元件。同樣的,有時在來源中利用 GROUP BY 和 SQL 彙總函數執行某些彙總反而會比較快。
  • 如果您使用的是 SQL Server 2008 並使用了「緩時變維度」(SCD) 元件,請進一步了解 SQL Server 中的新功能 MERGE。MERGE 可以完成絕大部分 SCD 可執行的工作,但是幾乎不需要如 SCD 所需的網路往返數目。
  • 也別忘了利用 SQL 的 INSERT INTO 功能。如果您的資料流程很簡單,同時來源以及目的地都位於同一個資料庫執行個體,您可能只需要一個 SQL 陳述式,讓資料完全在資料庫中進行移動,便可極為快速地執行相同的資料移動工作。在這種情況下,INSERT INTO 的執行速度可以比資料流程快上一倍,因為資料完全不需要離開伺服器。
  • 最後但也很重要的,就是如果您執行的是累加式載入的話,不妨考慮重新載入這個簡單的作法。我曾花許多時間在某些系統上執行差異偵測,希望能避免重新載入,但是為了達成此目的而使用的 I/O 和 CPU 量,最後反而讓工作變得更慢。

11:59

接著我們來看看載入階段。

載入資料到 SQL Server 時,您有兩個效能選項:

  • 第一個選項是使用 SQL Server 目的地元件。這個元件會使用資料流程和資料庫引擎間的共用記憶體,快速地載入資料,但是只有執行您資料流程的電腦就是執行 SQL Server 的電腦時,這種方法才有用。此外,SQL Server 目的地在錯誤處理上,也有一些已知的限制。
  • 快速載入至 SQL Server 的另一個選項,就是使用 OLE DB 目的地,而其執行速度通常跟 SQL 目的地差不多快。

對上述所有方式而言,將認可大小設為 0 可以取得最快的載入速度。

在執行大型載入時,卸除您目的地系統的索引是種很常見的作法,但您應該運用一些方針來判斷何時可以這麼做。最常見的方針之一,就是根據載入預估會導致的提高百分比,以及資料表的索引類型,來決定卸除索引:

  • 如果您的資料表中有單一個叢集索引,請不要卸除它。因為您的資料表是根據索引鍵排序,而卸除、插入再重建所需的時間,最終仍不會少於以叢集索引就地載入所需的時間。
  • 當您的資料表中有單一個非叢集索引,如果載入代表資料大小會增加一倍,便可考慮卸除它。這只是個基本原則而不是確切的值,但基本上如果資料表的大小不會變為兩倍的話,卸除索引並重建其實沒什麼意義。
  • 如果資料表中有多個索引,就比較不容易建立基本原則。我個人比較傾向採用 10% 的增加範圍。比如說,載入若小於目前容量的 10% 的話,大概應該保留原先的索引;但您最好還是不斷嘗試並測量結果,找出最適當的作法。

如果您要將資料載入到另有活動進行中的資料表,就必須想出適當的策略。大量載入很可能會鎖定所有或是大部分的目的地資料表,因此您必須確認可以這樣做,或使用資料分割。如果您需要再次載入某個運作資料庫,您可以建立資料分割以供載入資料,讓目前的運作資料庫可以保持使用。如果載入速度很慢,您應該要檢查該資料表或資料分割目前是否有其他活動正在進行,並確認沒有其他事項會佔用它。

如需有關提升大量載入和資料分割效能的精彩指南,請至 MSDN 上搜尋篇名為<資料載入效能指南>(英文) 的 SQLCAT 文章。

此外,在進行重新載入時,請確認使用 TRUNCATE 而非 DELETE 來清除資料,這樣刪除的資料才不會是交易式。

使用網路連接的目的地也會發生先前我說過的網路問題。請提高封包大小並為您網路啟用「Jumbo Frame」(大型封包) 功能,在載入時取得最佳的效能表現。

15:02

本效能系列的第二部份就到此結束,在此要特別感謝 Thomas 提供了實用資訊,構成本系列影片的基礎,也要感謝 Carla 和 Douglas 在製作此系列時提供的協助。如需這些主題的詳細資訊,請參閱<SQL Server Integration Services 十大最佳作法>(英文)。

謝謝您觀看本影片,請記得觀看「SSIS 之效能設計與微調」這個系列影片的其他三個單元。希望您覺得有所收穫,並歡迎您提供寶貴的意見,請到影片首頁,利用右上角的連結評等並提供意見。

請參閱

其他資源

SQLCAT 小組

說明及資訊

取得 SQL Server 2008 協助