Beachten Sie die folgenden Richtlinien, wenn Sie BatchJobService verwenden.
Durchsatz verbessern
Weniger größere Jobs sind vielen kleineren Jobs vorzuziehen.
Ordnen Sie hochgeladene Vorgänge nach Vorgangstyp (mit Ausnahme von voneinander abhängigen Vorgängen, die in atomaren Sub-Batches aufeinanderfolgend gruppiert werden müssen). Wenn Ihr Job beispielsweise Vorgänge zum Hinzufügen von Standardkampagnen, Anzeigengruppen und Anzeigengruppenkriterien enthält, sollten Sie die Vorgänge in Ihrem Upload so anordnen, dass zuerst alle Kampagnenvorgänge, dann alle Anzeigengruppenvorgänge und schließlich alle Anzeigengruppenkriteriumsvorgänge ausgeführt werden.
Bei Vorgängen desselben Typs kann es die Leistung verbessern, wenn Sie sie nach übergeordneter Ressource gruppieren. 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 Anzeigengruppenkriterien in verschiedenen Anzeigengruppen auswirken.
Atomarität beim Aufteilen von Batches
In der Google Ads API werden die Vorgänge in einem eingereichten Batchjob zur Verarbeitung in kleinere Unter-Batches aufgeteilt. Standard-Unterbatches werden mit aktivierter Option für Teilausfälle ausgeführt. Unterbatches für bestimmte voneinander abhängige Vorgänge werden jedoch atomar als einzelne Transaktion verarbeitet:
- Aufeinanderfolgende
AdGroupCriterionOperation-Vorgänge (create,updateundremove) fürLISTING_GROUP-Kriterien (AdGroupCriterion.listing_group), die auf dasselbeAdGroupausgerichtet 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 dasselbeAssetGroupausgerichtet sind (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 dasselbeAssetGroupausgerichtet sind (schlägt mitBatchJobError.ASSET_GROUP_AND_ASSET_GROUP_ASSET_TRANSACTION_FAILUREfehl, wenn ein Vorgang in der Gruppe fehlschlägt). JederAssetGroupOperation-Vorgang (updateoderremove) wird in einem eigenen, eigenständigen Sub-Batch mit einem einzelnen Vorgang ausgeführt. - Eine Performance Max-
CampaignOperation-Operation (create) mit aktivierten Markenrichtlinien (brand_guidelines_enabledauftruegesetzt oder nicht festgelegt, da standardmäßigtrueverwendet wird, sofern nicht explizitfalsefestgelegt wird oder eine Performance Max-Kampagne mit Zielvorhaben für die Reisebranche erstellt wird), gefolgt von bis zu 999CampaignAssetOperation-Operationen (create), die auf dasselbeCampaignausgerichtet sind (schlägt mitBatchJobError.CAMPAIGN_AND_CAMPAIGN_ASSET_TRANSACTION_FAILUREfehl, wenn eine Operation in der Gruppe fehlschlägt). Performance Max-Kampagnen für den Einzelhandel (mit einem Merchant Center-Feed) können erstellt werden, ohne dass MarkenressourcenCampaignAssetim selben atomaren Sub-Batch verknüpft werden müssen.
Für Unterbatches zum Erstellen von AssetGroup- und Performance Max-Kampagnen Campaign (bis zu 1.000 Vorgänge insgesamt pro Unterbatch; alle untergeordneten create-Vorgänge über 999 hinaus werden in den nächsten nicht atomaren Unterbatch übertragen):
- Für den übergeordneten
create-Vorgang (resource_namefürAssetGroupoderCampaign) und die nachfolgenden untergeordnetencreate-Vorgänge (asset_groupfürAssetGroupAssetodercampaignfürCampaignAsset) muss dieselbe negative temporäre ID angegeben werden. - Platzieren Sie alle erforderlichen
AssetOperation-Vorgänge (create) für neueAsset-Ressourcen vor dem übergeordnetenAssetGroupOperation- oderCampaignOperation-Vorgang (create), niemals zwischen dem übergeordnetencreate-Vorgang und den zugehörigen untergeordneten Linkvorgängen (create), da dadurch der atomare Unter-Batch sofort geschlossen und die Erstellung der übergeordneten Ressource von den verknüpften Assets getrennt würde.
Wenn ein atomarer Unter-Batch fehlschlägt, enthält das BatchJobResult.status des fehlerhaften Vorgangs den zugrunde liegenden Validierungsfehler. Die verbleibenden Vorgänge in diesem Unter-Batch werden mit dem entsprechenden Transaktionsfehler für diesen Unter-Batch zurückgesetzt. Sehen Sie sich die benachbarten BatchJobResult-Einträge mit derselben AdGroup-, AssetGroup- oder Campaign-ID an, um den Fehler zu finden, der die Ursache ist.
Wenn zugehörige Vorgänge in einer dieser Gruppen nicht nacheinander hinzugefügt werden, werden sie in der Google Ads API in separate Unter-Batches aufgeteilt. Dadurch kann es passieren, dass die Mindestanforderungen für Assets nicht erfüllt werden oder die Bäume der Eintragsgruppen unvollständig sind. Weitere Informationen finden Sie unter Eintragsgruppenfilter in Batchjobs verwenden und Batchverarbeitung von Performance Max-Kampagnen.
Logische Gruppierung
Wenn Sie eine Hierarchie für die Produktausrichtung ändern (AssetGroupListingGroupFilterOperation in Performance Max-Kampagnen oder AdGroupCriterionOperation in Shopping-Kampagnen) 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 Konflikte bei Backend-Sperren reduziert und voneinander abhängige Bäume bleiben zusammen.
Datenkonsistenz
Da Eintragsgruppen-Filterbäume und Anforderungen an Assets für Performance Max-Kampagnen am Ende jeder atomaren Sub-Batch-Transaktion validiert werden, sollten Sie Aktualisierungen derselben übergeordneten Ressource nicht auf diskontinuierliche Bereiche in einem Job oder auf gleichzeitige Jobs aufteilen.
Probleme mit der Nebenläufigkeit vermeiden
Wenn Sie mehrere gleichzeitige Jobs für dasselbe Konto einreichen, können Sie die Wahrscheinlichkeit verringern, dass Jobs gleichzeitig auf dieselben Objekte zugreifen, ohne die Jobgröße zu verringern. Viele unvollständige Jobs mit dem Status
RUNNING, die versuchen, dieselben Objekte zu ändern, können 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
Rufen Sie den Jobstatus nicht zu häufig ab, da sonst Ratenbegrenzungen erreicht werden können.
Lassen Sie
page_sizebeim Aufrufen vonListBatchJobResultsnicht festgelegt (oder legen Sie es auf den Maximalwert von1000fest), um die Anzahl der Roundtrips für die Paginierung zu minimieren. Legen Sieresponse_content_typenur aufMUTABLE_RESOURCEfest, wenn Ihre Anwendung die zurückgegebenen Ressourcenfelder überresource_namehinaus prüft.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_secondsauf das gewünschte Zeitlimit in Sekunden fest. Wennmetadata.execution_limit_secondsnicht festgelegt ist, gibt es kein Standardzeitlimit.Das Protokolllimit liegt bei 10.000 Vorgängen pro Anfrage. Wir empfehlen jedoch, nicht mehr als 1.000 Vorgänge pro
AddBatchJobOperationsRequesthinzuzufügen und die restlichen Vorgänge mitsequence_tokenin denselben Job hochzuladen. Je nach Größe der Vorgänge kann das Senden zu vieler Vorgänge in einem einzelnenAddBatchJobOperationsRequesteinenBatchJobError.REQUEST_TOO_LARGE-Fehler verursachen. Sie können diesen Fehler beheben, indem Sie die Anzahl der Vorgänge reduzieren und dieAddBatchJobOperationsRequestnoch einmal versuchen.
Beschränkungen
Jede
BatchJobunterstützt bis zu eine Million Vorgänge. Wenn Sie dieses Limit beim Aufrufen vonAddBatchJobOperationsüberschreiten, wird einResourceCountLimitExceededError.RESOURCE_LIMIT-Fehler (mitResourceLimitType.BATCH_JOB_OPERATIONS_PER_JOBinErrorDetails.resource_count_details) zurückgegeben.Jedes Konto kann bis zu 100 aktive oder ausstehende Jobs gleichzeitig haben. Wenn Sie dieses Limit beim Erstellen eines Batchjobs mit
MutateBatchJobüberschreiten, wird einResourceCountLimitExceededError.RESOURCE_LIMIT-Fehler zurückgegeben (mitResourceLimitType.BATCH_JOBS_PER_CUSTOMERinErrorDetails.resource_count_details).Ausstehende Jobs, die älter als 7 Tage sind, werden automatisch entfernt.
Für jede
AddBatchJobOperationsRequestgilt ein hartes Limit von 10.000 Mutationsvorgängen pro Anfrage. Wenn Sie in einer einzelnen Anfrage mehr als 10.000 Vorgänge ausführen,wird der FehlerBatchJobError.REQUEST_TOO_LARGEzurückgegeben.Für das Feld
page_sizeinListBatchJobResultsRequest:- Wenn
page_sizenicht festgelegt oder0ist, wird standardmäßig der Maximalwert von1000verwendet. - Wenn
page_size1000überschreitet oder kleiner als0ist, gibt die API einenBatchJobError.INVALID_PAGE_SIZE-Fehler zurück.
- Wenn
Jede
AddBatchJobOperationsRequestdarf maximal 41.937.920 Byte groß sein. 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 darf bis zu 41.937.920 Byte betragen. Die serialisierte Größe eines 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 Grenzwert von 10.484.504 Byte angegeben, AddBatchJobOperations gibt diesen Fehlercode jedoch zurück, wenn einer der drei Anfragengrenzwerte (41.937.920 Byte für die gesamte Anfrage, 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.