1.Kettle作了一個做業,併發
執行的時候問題發生在步驟2和步驟3之間,也就是步驟2還未徹底執行完的時候,步驟3就要更新步驟2插入的數據,形成死鎖。(個人理解是既然都分開做業了,那麼每一個做業都是一個單獨的事務,只有上個事務執行完畢後纔會執行下個步驟,爲何會搶資源呢?另外看網上描述,說Kettle社區版只支持單表事務,不知道和這裏是否有聯繫。)spa
日誌報錯提示以下:線程
事務(進程 ID 51)與另外一個進程被死鎖在 鎖 資源上,而且已被選做死鎖犧牲品。請從新運行該事務。日誌
解決辦法就是在步驟2的做業最後環節加入一個阻塞,使步驟2完成以後再繼續步驟三。blog
記住,要勾選Pass all rows進程
次日發現日誌仍是出現同樣的狀況。後面從新翻開做業看下事務
發現問題的癥結出如今這個做業裏面,打開這個做業對應的轉換。原來問題在這裏,資源
1.同時作了兩個更新。社區
2.兩個更新針對是同一個表。im
3.轉換內是併發執行的。
至此問題已明白,同一時間更新同一表確定會形成線程佔用的狀況!
解決辦法就是把做業和轉換分拆成兩個,問題解決。
總結:
1.轉換中同一個表多個更新不要寫在一塊兒,要分開多個做業。
2.做業和轉換的名稱命名最好按照順序來,後面出錯後在日誌排查的地方能夠提供有力的分析。前面這塊沒作好,沒有經過日誌直接發現問題出處。
上面顯示先四、後3,實際上是做業4調用了轉換3。結果我一直去做業3那裏分析了好久。切記切記!