Best Practices und Einschränkungen

Beachten Sie die folgenden Richtlinien, wenn Sie BatchJobService verwenden.

Durchsatz verbessern

  • Weniger größere Jobs sind besser als viele kleinere Jobs.

  • Hochgeladene Vorgänge nach Vorgangstyp sortieren. Wenn Ihr Job beispielsweise Vorgänge zum Hinzufügen von Kampagnen, Anzeigengruppen und Anzeigengruppenkriterien enthält, ordnen Sie die Vorgänge in Ihrem Upload so an, dass alle Kampagnenvorgänge zuerst, gefolgt von allen Anzeigengruppenvorgängen und schließlich allen Anzeigengruppenkriteriumvorgängen stehen.

  • Bei Vorgängen desselben Typs kann es die Leistung verbessern, sie nach übergeordneter Ressource zu gruppieren. Wenn Sie beispielsweise eine Reihe von AdGroupCriterionOperation-Objekten haben, kann es effizienter sein, Vorgänge nach Anzeigengruppe zu gruppieren, anstatt Vorgänge zu mischen, die sich auf Anzeigengruppenkriterien in verschiedenen Anzeigengruppen auswirken.

Probleme mit der Parallelität vermeiden

  • Wenn Sie mehrere gleichzeitige Jobs für dasselbe Konto einreichen, sollten Sie die Wahrscheinlichkeit verringern, dass Jobs gleichzeitig auf dieselben Objekte zugreifen, und gleichzeitig große Jobgrößen beibehalten. Viele unfertige Jobs mit dem Status RUNNING versuchen, dieselben Objekte zu ändern. Dies kann zu Deadlock-ähnlichen Bedingungen führen, die zu erheblichen Verlangsamungen und sogar zu Jobfehlern führen.

  • Reichen Sie nicht mehrere Vorgänge ein, die dasselbe Objekt im selben Job ändern, da das Ergebnis unvorhersehbar sein kann.

Ergebnisse optimal abrufen

  • Fragen Sie den Jobstatus nicht zu häufig ab, da sonst Ratenbegrenzungen erreicht werden können.

  • Rufen Sie nicht mehr als 1.000 Ergebnisse pro Seite ab. Der Server kann aufgrund von Auslastung oder anderen Faktoren weniger zurückgeben.

  • Die Reihenfolge der Ergebnisse entspricht der Reihenfolge der Uploads.

Zusätzliche Hinweise zur Verwendung

  • Sie können eine Obergrenze für die Ausführungsdauer eines Batchjobs festlegen, bevor er abgebrochen wird. Legen Sie beim Erstellen eines neuen Batchjobs das Feld metadata.execution_limit_seconds auf das gewünschte Zeitlimit in Sekunden fest. Wenn metadata.execution_limit_seconds nicht festgelegt ist, gibt es kein Standardzeitlimit.

  • Es wird empfohlen, nicht mehr als 1.000 Vorgänge pro AddBatchJobOperationsRequest hinzuzufügen und die sequence_token zu verwenden, um die restlichen Vorgänge in denselben Job hochzuladen. Je nach Inhalt der Vorgänge kann es bei zu vielen Vorgängen in einem einzelnen AddBatchJobOperationsRequest zu einem REQUEST_TOO_LARGE-Fehler kommen. Sie können diesen Fehler beheben, indem Sie die Anzahl der Vorgänge reduzieren und den AddBatchJobOperationsRequest noch einmal versuchen.

Beschränkungen

  • Jede BatchJob unterstützt bis zu einer Million Vorgänge.

  • Jedes Konto kann bis zu 100 aktive oder ausstehende Jobs gleichzeitig haben.

  • Ausstehende Jobs, die älter als 7 Tage sind, werden automatisch entfernt.

  • Jede AddBatchJobOperationsRequest darf maximal 10.484.504 Byte groß sein. Wenn Sie dieses Limit überschreiten, erhalten Sie eine INTERNAL_ERROR. Sie können die Größe der Anfrage vor dem Senden ermitteln und entsprechende Maßnahmen ergreifen, wenn sie zu groß ist.

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