最佳做法和限制

使用 BatchJobService 時,請參考下列規範。

改善總處理量

  • 建議使用較少的大型工作,而非許多小型工作。

  • 依作業類型排序上傳的作業。舉例來說,如果工作包含新增廣告活動、廣告群組和廣告群組條件的作業,請在上傳時依序排列作業,讓所有廣告活動作業排在最前,接著是所有廣告群組作業,最後是所有廣告群組條件作業

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

避免並行問題

  • 為同一個帳戶提交多個並行工作時,請盡量減少同時對同一項物件執行的工作的可能性,同時維持較大的作業大小。許多未完成的工作 (狀態為 RUNNING) 會嘗試變更相同的物件集,這可能導致類似死結的情況,導致嚴重減速,甚至導致工作失敗。

  • 請勿在同一個工作中提交會變更相同物件的多項作業,因為結果可能無法預測。

最佳化結果擷取作業

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

  • 每個網頁最多只能擷取 1,000 個結果。但由於負載或其他因素,伺服器可能會傳回的數量會少於這個數字。

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

其他使用指南

  • 您可以設定批次工作允許執行的時間長度上限,建立新的批次作業時,請將 metadata.execution_limit_seconds 欄位設為所需的時間限制 (以秒為單位)。如果未設定 metadata.execution_limit_seconds,則沒有預設的時間限制。

  • 建議每個 AddBatchJobOperationsRequest 最多加入 1,000 個作業,並使用 sequence_token 將其他作業上傳至相同的工作。視作業內容而定,單一 AddBatchJobOperationsRequest 中作業過多可能會導致 REQUEST_TOO_LARGE 錯誤。您可以減少作業次數並重試 AddBatchJobOperationsRequest,藉此處理這項錯誤。

限制

  • 每個 BatchJob 最多可支援一百萬個作業。

  • 每個帳戶最多可同時有 100 個進行中或待處理的工作。

  • 系統會自動移除 7 天前的待處理工作。

  • 每個 AddBatchJobOperationsRequest 的大小上限為 10,484,504 位元組。如果超過這個數量,您會收到 INTERNAL_ERROR。您可以在提交前判斷要求的大小,並在大小過大時採取適當行動。

    Java

    
    static final int MAX_REQUEST_BYTES = 10_484_504;
    
    ... (code to get the request object)
    
    int sizeInBytes = request.getSerializedSize();
    

    Python

    
    from google.ads.googleads.client import GoogleAdsClient
    
    MAX_REQUEST_BYTES = 10484504
    
    ... (code to get the request object)
    
    size_in_bytes = request._pb.ByteSize()
    

    小茹

    
    require 'google/ads/google_ads'
    
    MAX_REQUEST_BYTES = 10484504
    
    ... (code to get the request object)
    
    size_in_bytes = request.to_proto.bytesize
    

    PHP

    
    use Google\Ads\GoogleAds\V16\Resources\Campaign;
    
    const MAX_REQUEST_BYTES = 10484504;
    
    ... (code to get the request object)
    
    $size_in_bytes = $campaign->byteSize() . PHP_EOL;
    

    .NET

    
    using Google.Protobuf;
    const int MAX_REQUEST_BYTES = 10484504;
    
    ... (code to get the request object)
    
    int sizeInBytes = request.ToByteArray().Length;
    

    Perl

    
    use Devel::Size qw(total_size);
    use constant MAX_REQUEST_BYTES => 10484504;
    
    ... (code to get the request object)
    
    my $size_in_bytes = total_size($request);