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