最佳做法和限制

使用 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()
    

    Ruby

    
    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);