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


1.Kettle做了一個作業,

執行的時候問題發生在步驟2和步驟3之間,也就是步驟2還未完全執行完的時候,步驟3就要更新步驟2插入的數據,造成死鎖。(我的理解是既然都分開作業了,那么每個作業都是一個單獨的事務,只有上個事務執行完畢后才會執行下個步驟,為什么會搶資源呢?另外看網上描述,說Kettle社區版只支持單表事務,不知道和這里是否有聯系。)

日志報錯提示如下:

事務(進程 ID 51)與另一個進程被死鎖在 鎖 資源上,並且已被選作死鎖犧牲品。請重新運行該事務。

 

解決辦法就是在步驟2的作業最后環節加入一個阻塞,使步驟2完成之后再繼續步驟三。

記住,要勾選Pass all rows

 

第二天發現日志還是出現一樣的情況。后面重新翻開作業看下

發現問題的症結出現在這個作業里面,打開這個作業對應的轉換。原來問題在這里,

1.同時做了兩個更新。

2.兩個更新針對是同一個表。

3.轉換內是並發執行的。

至此問題已明白,同一時間更新同一表肯定會造成線程占用的情況!

解決辦法就是把作業和轉換分拆成兩個,問題解決。

總結:

1.轉換中同一個表多個更新不要寫在一起,要分開多個作業。

2.作業和轉換的名稱命名最好按照順序來,后面出錯后在日志排查的地方可以提供有力的分析。前面這塊沒做好,沒有通過日志直接發現問題出處。

上面顯示先4、后3,其實是作業4調用了轉換3。結果我一直去作業3那里分析了很久。切記切記!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM