在用 Bulk API in parallel mode load 大量 Data 的時候,容易遇到 record lock contention。其實有個前置處理的小技巧……

小技巧

如果你要 load 的 data 有 Master-Detail 的 Parent 欄位或是 Lookup 欄位,可以試試看先在 csv 檔裡面針對這個欄位做排序。

Salesforce 給的官方建議原文是:Pre-sort the child records by parent Id in her CSV file to lessen the chance of parent record lock contention among parallel load batches. 

(請參考: Salesforce Anti-Patterns: A Cautionary Tale )


原理說明

因為在 load data 的時候,對應的 parent record/被lookup的 record 會被 lock 住,以維資料正確完整。(可參考這篇詳細說明: )
如果所 load 的資料未經排序,而 bulk API 又選擇了 parallel mode ,則對應到同樣 parent record 的child record 就可能散落在平行處理的各個線程(threads)中。就變成各線程你卡我、我卡你,大家都動不了。
如果有先排序,就可以讓同樣 parent 的 child record 都盡可能集中在同一個線程中,一次處理。
就不太會卡來卡去囉~

留言

這個網誌中的熱門文章

ISC2 CC (Certified in Cybersecurity Certification) 考試心得

Salesforce證照考試心得 (Administrator and Advanced Administrator)