Kettle 解決數據鎖的問題(事務(進程 ID 51)與另外一個進程被死鎖在 鎖 資源上)

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那裏分析了好久。切記切記!

相關文章
相關標籤/搜索