Kettle 解決資料鎖的問題(事務(程序 ID 51)與另一個程序被死鎖在 鎖 資源上)
阿新 • • 發佈:2018-11-21
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那裡分析了很久。切記切記!