1. 程式人生 > >Kettle 解決資料鎖的問題(事務(程序 ID 51)與另一個程序被死鎖在 鎖 資源上)

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