一,數據類型的選擇
對于SSIS的數據類型,容易遺漏精度的是,不正確的使用,time,decimal 等數據類型,可能導致溢出或數據丟失。
1,變量和參數的時間類型()
和 的對應 (對應SQL Server的),格式是:yyyy-MM-dd hh:mm:ss XM,例如 “2016-05-19 5:41:32 PM”,只精確到秒。
2,轉換組件
由于轉換組件不能丟失精度,因此有以下三種方式:,,.
3,類型轉換對性能的影響
只在必要時,進行數據類型的轉換,因為每次轉換,SSIS Engine都需要付出一定的代價。
如果將值轉換為一個不支持的數據類型,那么將會在SSIS內部產生一個到映射數據的額外轉換,最好將數據類型轉換為與目標最接近的數據類型。
4,數據類型的選擇
SSIS的 Data Flow需要在內存中完成大量的工作,消除了最費時的IO操作,使數據的讀取,轉換和加載性能飛快。由于SSIS使用內存緩存區來完成相關操作,被加載到緩沖區的行數直接和row的寬度相關,row的寬度越窄,緩沖區容納的行數越多,被處理的數據量越大,性能越好。如果要定義大型輸入源的數據類型,必須慎重挑選數據類型,使用最接近的大小和精度存儲和轉換數據,既能使row的寬度不至于太寬,也能避免過多的數據類型轉換。
二,利用數據流
數據流利用內存來緩沖數據,并在內存中處理數據轉換,由于內存的訪問速度是非常快的,所以SSIS數據流轉換性能是非常高效的。SSIS Engine將數據分批加載到內存中,當Data Flow將一批新的數據加載到內存時,下游轉換組件會對已經加載到內存中數據進行處理,同時,目的組件會將處理完成的數據加載到Target Table中,數據的讀取,轉換和加載同時進行,這就是數據流的優勢。
1,利用數據流,能夠減少暫存和昂貴的disk IO 操作
在大量數據的ETL系統中,Disk IO是系統性能的。相比內存 RAM,Disk IO的讀取和寫入速度非常慢,將內存緩沖區中的數據寫入暫存表,再從暫存表中讀取數據到內存中,不僅成倍增加了Disk IO,而且限制了數據流的并發處理能力。請記住,使用暫存表的場景是:ETL系統中存在大量數據的更新操作。這是由于Data Flow 沒有基于集合的更新轉換組件,OLEDB Command 轉換組件是逐行對數據進行更新操作,使用暫存表,能夠充分利用RDBMS對數據進行基于集合的更新操作的優勢。如果ETL系統不存在大量數據的更新操作,請選擇使用數據流來處理數據。
2,利用數據流,減少對RDBMS的依賴
使用Data Flow轉換組件來聯接和清洗數據是十分高效的,這是因為,數據的讀取,轉換和加載同時進行。RDBMS對數據的處理是原子性的,在數據被處理完成之前,是不能被其他SQL語句處理的,相反,數據流可以并行地處理數據的提取,清洗,聯接和寫入,因此,充分利用數據流的并發處理優勢,會使數據整體的處理時間大幅減少。
3,利用RDBMS處理數據源
在使用Source適配器獲取數據時,利用數據庫的order by 子句進行排序,將會比Sort 轉換更有效率;對于源是多表聯接的查詢語句,使用RDBMS獲取數據將會更快。
三,并發設計
最大的并發程度,是由服務器的CPU數量確定的,在同一時間執行的線程的最大數量是CPU的個數,一個CPU在某一時刻,只有一個Process處于Running狀態,所以最大并發度不要超過CPU的個數。
通過以下兩個屬性控制ETL執行的并發度:
1,利用優先約束來并發處理數據
Data Flow Task 和 Data Flow Task 1 是并發執行的,而 Data Flow Task2 必須等到 Data Flow Task 和 Data Flow Task 1 執行完成之后,才開始執行。
2,從同一個表中并發獲取數據
如何從一個數據表中并發處理數據,設計思路是把一個表中的數據平均分成N份,各個數據流之間并發處理。
例如分為3份,可以使用%3,將數據分為三個子數據流并發處理數據。
select *
from dbo.SourceTable
where checksum(table_column)%3=0
select *
from dbo.SourceTable
where checksum(table_column)%3=1
select *
from dbo.SourceTable
where checksum(table_column)%3=2
*請認真填寫需求信息,我們會在24小時內與您取得聯系。