什麼是平衡資料分配器 (BDD)?
Balanced Data Distributor (BDD) 是 SQL Server Integration Services (SSIS) 的自訂資料流轉換元件,將單一輸入資料流平均分配到多個輸出路徑,利用多核心/多處理器平行處理,大幅縮短資料載入時間。
運作原理
- 輸入緩衝區資料列按循環或雜湊方式分發到 N 個輸出。
- 各輸出接接各自的轉換/目的地元件,在獨立執行緒並行執行。
- 不保證輸出順序(資料列被切分為大致相等的緩衝區)。
適用條件(四項皆須符合)
- 大量資料需移動(百萬列以上)。
- 來源讀取快(如純文字檔、平面檔),但轉換或目的地存在瓶頸(複雜運算、慢速 OLE DB 目的地)。
- 不需維護來源資料順序。
- 目的地為同質(相同結構、相同連線類型)。
效能實測
- Boyan Penev 本地測試:比單一腳本元件直接插入 提升 35%~45%。
- SQL Server 效能團隊發布最佳實踐白皮書,詳述平行度設定、緩衝區大小、MaxConcurrentExecutables 調整。
部署與使用
- SSIS 2008 內建提供 BDD 元件(工具箱「常用」或「其他」類別)。
- 拖曳到資料流設計面,連接來源 → BDD → 多條路徑 → 相同目的地元件(複製/貼上)。
- 設定
MaxConcurrentExecutables = 邏輯核心數(或 -1 自動)以發揮最大平行度。
注意事項
- 單核心環境不提升、反而降低效能(額外分發開銷)。
- 資料列順序敏感場景(如身分識別值賦予、序號產生)禁用。
- 目的地必須支援並行寫入(如多個 OLE DB 目的地指向同資料表需啟用 TABLOCK、或使用分區表)。
- 錯誤處理:單一路徑失敗不影響其他路徑,需自行設計重試/記錄機制。
總結
BDD 是 SSIS 高效能資料載入的利器,透過「分發-平行處理-合併」模式,在多核心硬體上將 CPU 密集型轉換、I/O 密集型寫入線性擴展。正確評估適用條件、調整平行度參數,即可在不修改商業邏輯前提下獲得顯著效能增益。