Best Practices und Einschränkungen

Beachten Sie die folgenden Richtlinien, wenn Sie BatchJobService verwenden.

Durchsatz verbessern

  • Weniger größere Jobs sind vorzuziehen.

  • 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 zuerst alle Kampagnenvorgänge, dann alle Anzeigengruppenvorgänge und zuletzt alle Vorgänge für Anzeigengruppenkriterien ausgeführt werden.

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

Probleme mit Parallelität vermeiden

  • Wenn Sie mehrere Jobs gleichzeitig für dasselbe Konto einreichen, sollten Sie die Wahrscheinlichkeit verringern, dass Jobs gleichzeitig auf dieselben Objekte angewendet werden, und gleichzeitig große Jobgrößen beibehalten. Bei vielen nicht abgeschlossenen Jobs mit dem Status RUNNING wird versucht, dieselbe Gruppe von Objekten zu mutieren. Dies kann zu einer Art Deadlock führen, was zu erheblichen Verzögerungen und sogar zu Jobfehlern führt.

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

Ergebnisse optimal abrufen

  • Prüfe den Jobstatus nicht zu häufig, da sonst Ratenbegrenzungsfehler auftreten 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 des 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 im Feld metadata.execution_limit_seconds das gewünschte Zeitlimit in Sekunden fest. Wenn metadata.execution_limit_seconds nicht festgelegt ist, gibt es kein Standardzeitlimit.

  • Es wird empfohlen,pro AddBatchJobOperationsRequest nicht mehr als 1.000 Vorgänge hinzuzufügen und den Rest der Vorgänge mit sequence_token in denselben Job hochzuladen. Je nach Inhalt der Vorgänge können zu viele Vorgänge in einer einzelnen AddBatchJobOperationsRequest zu einem REQUEST_TOO_LARGE-Fehler führen. Sie können diesen Fehler beheben, indem Sie die Anzahl der Vorgänge reduzieren und die AddBatchJobOperationsRequest noch einmal versuchen.

Beschränkungen

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

  • Für jedes Konto können gleichzeitig bis zu 100 aktive oder ausstehende Jobs vorhanden sein.

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

  • Jede AddBatchJobOperationsRequest darf maximal 10.484.504 Byte groß sein. Wenn Sie diese Anzahl überschreiten, erhalten Sie eine INTERNAL_ERROR. Sie können die Größe der Anfrage vor dem Senden bestimmen 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);