Beachten Sie bei der Verwendung von BatchJobService die folgenden Richtlinien.
Durchsatz verbessern
Wenige größere Jobs sind vielen kleineren Jobs vorzuziehen.
Sortieren Sie hochgeladene Vorgänge nach Vorgangstyp (mit Ausnahme von voneinander abhängigen Vorgängen, die nacheinander in atomaren Unterbatches gruppiert werden müssen). Wenn Ihr Job beispielsweise Vorgänge zum Hinzufügen von Standardkampagnen, Anzeigengruppen und Anzeigengruppenkriterien enthält, ordnen Sie die Vorgänge in Ihrem Upload so, dass alle Kampagnenvorgänge zuerst aufgeführt werden, gefolgt von allen Anzeigengruppenvorgängen und schließlich allen Anzeigengruppenkriterienvorgängen.
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 zu mischen, die sich auf Kriterien in verschiedenen Anzeigengruppen auswirken.
Atomarität bei der Batchaufteilung
Die Google Ads API teilt die Vorgänge in einem eingereichten Batchjob zur Verarbeitung in kleinere Unterbatches auf. Während Standard-Unterbatches mit aktiviertem Teilfehler ausgeführt werden, werden Unterbatches für bestimmte voneinander abhängige Vorgänge atomar als einzelne Transaktion verarbeitet:
- Aufeinanderfolgende
AdGroupCriterionOperation-Vorgänge (create,updateundremove) fürLISTING_GROUP-Kriterien (AdGroupCriterion.listing_group), die auf dieselbeAdGroupausgerichtet sind (schlägt mitCriterionError.LISTING_GROUP_ERROR_IN_ANOTHER_OPERATIONfehl, wenn ein Vorgang in der Gruppe fehlschlägt). - Aufeinanderfolgende
AssetGroupListingGroupFilterOperation-Vorgänge (create,updateundremove), die auf dieselbeAssetGroupabzielen (schlägt mitBatchJobError.ASSET_GROUP_LISTING_GROUP_FILTER_TRANSACTION_FAILUREfehl, wenn ein Vorgang in der Gruppe fehlschlägt). - Ein
AssetGroupOperation(create), unmittelbar gefolgt von bis zu 999AssetGroupAssetOperation-Vorgängen (create), die auf dieselbeAssetGroupabzielen (schlägt mitBatchJobError.ASSET_GROUP_AND_ASSET_GROUP_ASSET_TRANSACTION_FAILUREfehl, wenn ein Vorgang in der Gruppe fehlschlägt). JederAssetGroupOperation(updateoderremove) wird in einem eigenen eigenständigen Sub-Batch mit einem einzelnen Vorgang ausgeführt. - Eine Performance Max-Kampagne (
CampaignOperation,create) mit aktivierten Markenrichtlinien (brand_guidelines_enabledauftruefestgelegt oder nicht festgelegt, da der Standardwerttrueist, sofern nicht explizit auffalsefestgelegt oder eine Performance Max-Kampagne für die Reisebranche erstellt wird), unmittelbar gefolgt von bis zu 999CampaignAssetOperation-Vorgängen (create), die auf dieselbeCampaignabzielen (schlägt mitBatchJobError.CAMPAIGN_AND_CAMPAIGN_ASSET_TRANSACTION_FAILUREfehl, wenn ein Vorgang in der Gruppe fehlschlägt). Performance Max-Kampagnen für den Einzelhandel (mit einem Merchant Center-Feed) können erstellt werden, ohne dass Markenressourcen vom TypCampaignAssetim selben atomaren Unterbatch verknüpft werden müssen.
Für die Erstellung von Unterbatches für AssetGroup und Performance Max-Kampagnen (Campaign) gilt Folgendes: Es sind insgesamt bis zu 1.000 Vorgänge pro Unterbatch zulässig. Alle untergeordneten create-Vorgänge über 999 werden in den nächsten nicht atomaren Unterbatch verschoben.
- Der übergeordnete
create-Vorgang (resource_namefürAssetGroupoderCampaign) und die nachfolgenden untergeordnetencreate-Vorgänge (asset_groupfürAssetGroupAssetodercampaignfürCampaignAsset) müssen dieselbe negative temporäre ID angeben. - Platzieren Sie alle erforderlichen
AssetOperation-Vorgänge (create) für neueAsset-Ressourcen vor dem übergeordnetenAssetGroupOperationoderCampaignOperation(create), niemals zwischen dem übergeordnetencreateund seinen untergeordneten Link-create-Vorgängen (wodurch der atomare Sub-Batch sofort geschlossen und die Erstellung der übergeordneten Ressource von ihren verknüpften Assets getrennt würde).
Wenn ein atomarer Unterbatch fehlschlägt, enthält der BatchJobResult.status des fehlerhaften Vorgangs den zugrunde liegenden Validierungsfehler. Die verbleibenden Vorgänge in diesem Unterbatch werden mit dem entsprechenden Transaktionsfehler für diesen Unterbatch zurückgesetzt. Prüfen Sie die benachbarten BatchJobResult-Einträge mit derselben AdGroup-, AssetGroup- oder Campaign-ID, um die Fehlerursache zu ermitteln.
Wenn zusammengehörige Vorgänge in einer dieser Gruppen nicht nacheinander hinzugefügt werden, werden sie von der Google Ads API auf separate Unterbatches aufgeteilt. Das führt dazu, dass die Änderung die Mindestanforderungen für Assets nicht erfüllt oder die Eintragsgruppenbäume unvollständig bleiben. Weitere Informationen finden Sie unter Filter für Eintragsgruppen in Batchjobs verwenden und Batchverarbeitung für Performance Max-Kampagnen.
Logische Gruppierung
Wenn Sie eine Produktausrichtungshierarchie (AssetGroupListingGroupFilterOperation in Performance Max-Kampagnen oder AdGroupCriterionOperation in Shopping-Kampagnen) ändern oder eine neue AssetGroup oder Performance Max-Campaign erstellen, gruppieren Sie alle Vorgänge, die auf dieselbe übergeordnete Ressource (AssetGroup, AdGroup oder Campaign) ausgerichtet sind, nacheinander. Dadurch werden Sperrkonflikte im Backend reduziert und voneinander abhängige Bäume bleiben zusammen.
Datenkonsistenz
Da Filterbäume für Eintragsgruppen und Asset-Anforderungen für Performance Max-Kampagnen am Ende jeder atomaren Unterbatch-Transaktion validiert werden, sollten Sie Aktualisierungen derselben übergeordneten Ressource nicht auf nicht zusammenhängende Bereiche in einem Job oder auf gleichzeitige Jobs aufteilen.
Nebenläufigkeitsprobleme vermeiden
Wenn Sie mehrere gleichzeitige Jobs für dasselbe Konto senden, sollten Sie die Wahrscheinlichkeit verringern, dass Jobs gleichzeitig für dieselben Objekte ausgeführt werden, und gleichzeitig große Jobgrößen beibehalten. Viele unvollständige Jobs mit dem Status
RUNNING, die versuchen, dieselbe Gruppe von Objekten zu mutieren, können zu Deadlock-ähnlichen Bedingungen führen, was zu einer erheblichen Verlangsamung und sogar zu Jobfehlern führt.Senden Sie nicht mehrere Vorgänge, 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 Fehler aufgrund von Ratenbegrenzungen auftreten können.
Lassen Sie
page_sizebeim Aufruf vonListBatchJobResultsungesetzt (oder setzen Sie es auf den Höchstwert von1000), um die Anzahl der Seitenwechsel zu minimieren. Setzen Sieresponse_content_typenur dann aufMUTABLE_RESOURCE, wenn Ihre Anwendung die zurückgegebenen Ressourcenfelder überresource_namehinaus prüft.Die Reihenfolge der Ergebnisse entspricht der Reihenfolge des Uploads.
Zusätzliche Nutzungshinweise
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_secondsdas gewünschte Zeitlimit in Sekunden fest. Wennmetadata.execution_limit_secondsnicht festgelegt ist, gibt es kein Standardzeitlimit.Obwohl das Protokolllimit bei 10.000 Vorgängen pro Anfrage liegt, empfehlen wir, nicht mehr als 1.000 Vorgänge pro
AddBatchJobOperationsRequesthinzuzufügen und die restlichen Vorgänge mit dersequence_tokenin denselben Job hochzuladen. Je nach Größe der Vorgänge kann das Senden zu vieler Vorgänge in einer einzelnenAddBatchJobOperationsRequestzu einemBatchJobError.REQUEST_TOO_LARGE-Fehler führen. Sie können diesen Fehler beheben, indem Sie die Anzahl der Vorgänge reduzieren und denAddBatchJobOperationsRequestwiederholen.
Beschränkungen
Jeder
BatchJobunterstützt bis zu eine Million Vorgänge. Wenn Sie dieses Limit beim Aufrufen vonAddBatchJobOperationsüberschreiten, wird einResourceCountLimitExceededError.RESOURCE_LIMIT-Fehler zurückgegeben (mitResourceLimitType.BATCH_JOB_OPERATIONS_PER_JOBinErrorDetails.resource_count_details).Pro Konto können bis zu 100 aktive oder ausstehende Jobs gleichzeitig vorhanden sein. Wenn Sie dieses Limit beim Erstellen eines Batchjobs mit
MutateBatchJobüberschreiten, wird der FehlerResourceCountLimitExceededError.RESOURCE_LIMIT(mitResourceLimitType.BATCH_JOBS_PER_CUSTOMERinErrorDetails.resource_count_details) zurückgegeben.Ausstehende Jobs, die älter als 7 Tage sind, werden automatisch entfernt.
Für jede
AddBatchJobOperationsRequestgilt ein festes Limit von 10.000 Mutationsvorgängen pro Anfrage. Wenn Sie mehr als 10.000 Vorgänge in einer einzelnen Anfrage ausführen,wird der FehlerBatchJobError.REQUEST_TOO_LARGEzurückgegeben.Für das Feld
page_sizeinListBatchJobResultsRequest:- Wenn
page_sizenicht festgelegt oder0ist, wird standardmäßig der Höchstwert von1000verwendet. - Wenn
page_sizeden Wert1000überschreitet oder kleiner als0ist, gibt die API den FehlerBatchJobError.INVALID_PAGE_SIZEzurück.
- Wenn
Jeder
AddBatchJobOperationsRequesthat eine maximale Größe von 41.937.920 Byte. Wenn Sie dieses Limit überschreiten, erhalten Sie den FehlerBatchJobError.REQUEST_TOO_LARGE(oderINTERNAL_ERROR, wenn die Anfrage auf der Transportschicht abgelehnt wird). Sie können die serialisierte 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 = 41_937_920; // ... (code to get the AddBatchJobOperationsRequest object) int sizeInBytes = request.getSerializedSize();C#
const int MAX_REQUEST_BYTES = 41_937_920; // ... (code to get the AddBatchJobOperationsRequest object) int sizeInBytes = request.CalculateSize();PHP
const MAX_REQUEST_BYTES = 41937920; // ... (code to get the AddBatchJobOperationsRequest object) $size_in_bytes = $request->byteSize();Python
MAX_REQUEST_BYTES = 41_937_920 # ... (code to get the AddBatchJobOperationsRequest object) size_in_bytes = type(request).pb(request).ByteSize()Ruby
MAX_REQUEST_BYTES = 41_937_920 # ... (code to get the AddBatchJobOperationsRequest object) size_in_bytes = request.to_proto.bytesizePerl
use JSON::XS; use constant MAX_REQUEST_BYTES => 41937920; # ... (code to get the AddBatchJobOperationsRequest object) # The Perl client library uses REST/JSON; UTF-8 JSON byte length provides a # conservative upper-bound estimate of the serialized request size. my $json_encoder = JSON::XS->new->utf8->convert_blessed; my $size_in_bytes = length($json_encoder->encode($request));
Größe eines einzelnen Änderungsvorgangs
Die Gesamtgröße der Anfrage kann bis zu 41.937.920 Byte betragen, die serialisierte Größe einer einzelnen MutateOperation im Batch ist jedoch auf 10.484.504 Byte (10 MiB minus 1.256 Byte) begrenzt. Bei Überschreiten dieses Limits wird ein BatchJobError.REQUEST_TOO_LARGE-Fehler zurückgegeben. In der Referenzdokumentation für BatchJobError.REQUEST_TOO_LARGE wird zwar der Schwellenwert von 10.484.504 Byte genannt, AddBatchJobOperations gibt jedoch denselben Fehlercode zurück, wenn einer der drei Anfrage-Schwellenwerte (41.937.920 Byte insgesamt, 10.484.504 Byte für einen einzelnen Vorgang oder 10.000 Vorgänge pro Aufruf) überschritten wird. Im Feld message des Fehlers wird angegeben, welches Limit überschritten wurde.