最佳做法和限制

使用 BatchJobService 時,請參考下列準則。

提高處理量

  • 建議您執行少量的大型工作,而非大量的小型工作。

  • 按照作業類型排序上傳的作業 (但相互依賴的作業必須連續分組在不可分割的子批次中)。舉例來說,如果您的工作包含新增標準廣告活動、廣告群組和廣告群組條件的操作,請在上傳時排序操作,讓所有廣告活動操作排在最前面,接著是所有廣告群組操作,最後是所有廣告群組條件操作。

  • 在相同類型的作業中,依據父項資源分組可以提升效能。舉例來說,如果您有一系列 AdGroupCriterionOperation 物件,建議您依廣告群組將作業分組,而不是混合會影響不同廣告群組中廣告群組條件的作業,這樣會更有效率。

批次分割的完整性

Google Ads API 會將提交的批次工作拆分為較小的子批次,標準子批次會在啟用部分失敗的情況下執行,而某些相互依賴作業的子批次則會以單一交易的形式進行原子處理:

AssetGroup 和最高成效廣告活動 Campaign 建立子批次 (每個子批次最多 1,000 項作業;超過 999 項的子 create 作業會移至下一個非不可分割子批次):

如果不可分割的子批次失敗,違規作業的 BatchJobResult.status 會包含基礎驗證錯誤,而該子批次中的其餘作業則會復原,並顯示該子批次的對應交易錯誤。檢查共用相同 AdGroup、AssetGroup 或 Campaign ID 的相鄰 BatchJobResult 項目,找出根本原因。

如果未連續新增這些群組中的相關作業,Google Ads API 會將這些作業拆分到不同的子批次,導致修改作業不符合最低素材資源規定,或商家資訊群組樹狀結構不完整。詳情請參閱「在批次工作中套用商家資訊群組篩選器」和「最高成效廣告活動批次處理」。

邏輯群組

修改產品指定階層 (最高成效廣告活動中的 AssetGroupListingGroupFilterOperation 或購物廣告活動中的 AdGroupCriterionOperation),或建立新的 AssetGroup 或最高成效 Campaign 時,請將指定相同父項資源 (AssetGroup、AdGroup 或 Campaign) 的所有作業連續分組。這可減少後端鎖定爭用,並將相互依賴的樹狀結構保持在一起。

資料一致性

由於系統會在每個原子子批次交易結束時,驗證商家資訊群組篩選器樹狀結構和最高成效廣告活動素材資源規定,因此請避免在工作的不連續範圍內,或在並行工作中,分割對相同父項資源的更新。

避免並行問題

  • 為同一個帳戶提交多項並行工作時,請降低工作同時在相同物件上執行的可能性,同時維持大型工作。如果有多項未完成的工作狀態為 RUNNING,且嘗試變更同一組物件,可能會導致類似死結的情況,造成嚴重速度減慢,甚至工作失敗。

  • 請勿在同一工作中提交多項會變更相同物件的操作,否則可能導致無法預測的結果。

以最佳方式擷取結果

  • 請勿過於頻繁地輪詢工作狀態,否則可能會發生頻率限制錯誤。

  • 呼叫 ListBatchJobResults 時,請將 page_size 保持未設定狀態 (或設為最大值 1000),盡可能減少分頁來回次數。只有在應用程式檢查傳回的資源欄位超過 resource_name 時,才將 response_content_type 設為 MUTABLE_RESOURCE。

  • 結果順序與上傳順序相同。

其他使用指南

限制

單一 mutate 作業大小

雖然整體要求最多可達 41,937,920 個位元組,但批次中單一 MutateOperation 的序列化大小上限為 10,484,504 個位元組 (10 MiB 減去 1,256 個位元組)。如果超過這項限制,系統會傳回 BatchJobError.REQUEST_TOO_LARGE 錯誤。請注意,雖然 BatchJobError.REQUEST_TOO_LARGE 的參考文件引用了 10,484,504 位元組的門檻,但只要超過三個要求門檻 (總要求位元組數 41,937,920、單一作業位元組數 10,484,504,或每次呼叫 10,000 次作業) 的任一項,AddBatchJobOperations 就會傳回相同的錯誤代碼,並在錯誤的 message 欄位中指定違反的限制。