PM問:“Vic,現(xiàn)在ETL Job跑到哪一個(gè)Package了,正在執(zhí)行哪個(gè)Task?”,第一次遇到這個(gè)問題時(shí),一下就懵逼了,只能硬著頭皮說:“我看看”。

在做項(xiàng)目開發(fā)時(shí),這個(gè)問題很常見,但是,被很多ETL開發(fā)工程師忽略了,可能是因?yàn)?,這不是一個(gè)直接可以給出答案的命題。

在做大數(shù)據(jù)處理時(shí),ETL Package開發(fā)工程師經(jīng)常會(huì)用到管理者模式(Manager Mode)設(shè)計(jì)Package,也就是說,管理者Package調(diào)用子Package,通過優(yōu)先約束控制子Package的并發(fā)調(diào)用和執(zhí)行順序,這種模式在管理大量Package的ETL工程時(shí)十分有用。當(dāng)使用該模式的Packages被部署到SQL Server時(shí),開發(fā)人員只需要?jiǎng)?chuàng)建一個(gè)Job,設(shè)置調(diào)度(Schedule),那么大管家(Agent)就會(huì)自動(dòng)調(diào)用Package,完成數(shù)據(jù)的處理,高枕無憂。

除了部署方便之外,管理者模式也能縮短ETL整體運(yùn)行的時(shí)間。在ETL Package調(diào)度的設(shè)計(jì)上,經(jīng)常會(huì)使用并發(fā)執(zhí)行模式:Task 并發(fā)執(zhí)行,Package并發(fā)執(zhí)行。對于Package的并發(fā)執(zhí)行模式,實(shí)現(xiàn)方式是:在SSIS Server上部署Package Job,每個(gè)Job Step執(zhí)行一個(gè)Manager Package ,該Manager Package 以并發(fā)方式調(diào)用Execute Package Task,因此,在同一時(shí)間存在多個(gè)Child Packages同時(shí)運(yùn)行,每一個(gè)子Package都是一個(gè)Executable文件,并發(fā)執(zhí)行的Executable的最大值是CPU的數(shù)量。

通常情況下,查看Job的執(zhí)行情況,都會(huì)使用Job Activity Monitor,但是,只能看到單個(gè)Job的執(zhí)行的歷史消息,當(dāng)Package 運(yùn)行出現(xiàn)異常時(shí),開發(fā)人員單純通過Monitor,看不到當(dāng)前正在運(yùn)行的Package和其他更底層的消息。那么,在Job運(yùn)行的過程中,如何查看正在運(yùn)行的Package呢? 答案是通過SSISDB記錄的消息。在Project 部署模式下,在任何一個(gè)Package執(zhí)行時(shí),SSIS引擎都會(huì)記錄Executable(Task,Container)在執(zhí)行過程中產(chǎn)生的歷史消息,因此,可以通過SSIS記錄的operation message 和 executable 名字來判斷當(dāng)前正在運(yùn)行的Package。

SSIS 執(zhí)行引擎使用SSISDB存儲(chǔ)Package執(zhí)行的歷史消息,SSIS引擎把Package的執(zhí)行抽象成一個(gè)操作(opertion),operation的類型主要是Project的部署,package執(zhí)行和消息的清理(cleanup)。每次執(zhí)行Package,SSIS執(zhí)行引擎都會(huì)創(chuàng)建operation_type=200的operation,使用catalog.operations記錄對Package執(zhí)行的operation,使用catalog.operation_messages視圖,記錄每個(gè)Package在執(zhí)行過程中產(chǎn)生的歷史消息,消息描述的對象是Executable,每一個(gè)Executable是Package中的一個(gè)可執(zhí)行組件,主要是Task和Container,通過Executable的名字,事件名稱,以及創(chuàng)建消息的時(shí)間,能夠推斷出當(dāng)前正在執(zhí)行的Executable,進(jìn)而推斷出當(dāng)前正在執(zhí)行的Package。

如果有人看過我之前的博客,應(yīng)該記得catalog.executables視圖,但是,從該視圖中,只能推斷出已經(jīng)執(zhí)行完成(Executed)的Executable,而不能推斷出正在執(zhí)行(Executing)的Executable,所以,沒有捷徑直接得出結(jié)論,那我們就按部就班,上干貨,代碼多,文章有點(diǎn)枯燥,還請手下留情。

1,查看正在運(yùn)行的operation

Integration Service Catalogs中Package執(zhí)行的任何操作,都會(huì)記錄在 catalog.operations 視圖中,該視圖的關(guān)鍵字段是:

  • 網(wǎng)友評(píng)論