Podczas korzystania z BatchJobService weź pod uwagę te wskazówki.
Zwiększanie przepustowości
Preferowana jest mniejsza liczba większych zadań niż wiele mniejszych.
Uporządkuj przesłane operacje według ich typu (z wyjątkiem operacji współzależnych, które muszą być zgrupowane kolejno w niepodzielnych podgrupach). Jeśli np. zadanie zawiera operacje dodawania standardowych kampanii, grup reklam i ich kryteriów, uporządkuj operacje w przesłanym pliku tak, aby najpierw były wszystkie operacje dotyczące kampanii, potem wszystkie operacje dotyczące grup reklam, a na końcu wszystkie operacje dotyczące kryteriów grup reklam.
W przypadku operacji tego samego typu wydajność można zwiększyć, grupując je według zasobu nadrzędnego. Jeśli na przykład masz serię obiektów
AdGroupCriterionOperation, bardziej efektywne może być grupowanie operacji według grupy reklam niż mieszanie operacji, które wpływają na kryteria w różnych grupach reklam.
Niepodzielność podczas dzielenia wsadowego
Interfejs Google Ads API dzieli operacje w przesłanym zadaniu wsadowym na mniejsze podzbiory, które następnie przetwarza. Standardowe podzbiory są wykonywane z włączonym częściowym niepowodzeniem, ale podzbiory niektórych współzależnych operacji są przetwarzane niepodzielnie jako pojedyncza transakcja:
- Kolejne operacje
AdGroupCriterionOperation(create,updateiremove) dotyczące kryteriówLISTING_GROUP(AdGroupCriterion.listing_group) kierowanych na ten sam elementAdGroup(jeśli dowolna operacja w grupie zakończy się niepowodzeniem, cała grupa zakończy się niepowodzeniemCriterionError.LISTING_GROUP_ERROR_IN_ANOTHER_OPERATION). - Kolejne operacje
AssetGroupListingGroupFilterOperation(create,updateiremove) dotyczące tego samego elementuAssetGroup(jeśli dowolna operacja w grupie się nie powiedzie, wystąpi błądBatchJobError.ASSET_GROUP_LISTING_GROUP_FILTER_TRANSACTION_FAILURE). - Operacja
AssetGroupOperation(create), po której natychmiast następuje maksymalnie 999 operacjiAssetGroupAssetOperation(create) kierowanych na ten sam elementAssetGroup(jeśli dowolna operacja w grupie się nie powiedzie, wystąpi błądBatchJobError.ASSET_GROUP_AND_ASSET_GROUP_ASSET_TRANSACTION_FAILURE). Każda operacjaAssetGroupOperation(updatelubremove) jest wykonywana w osobnym, samodzielnym podzbiorze pojedynczych operacji. - Kampania Performance Max
CampaignOperation(create) z włączonymi wskazówkami dotyczącymi marki (brand_guidelines_enabledustawione natruelub nieustawione, ponieważ domyślnie jest totrue, chyba że wyraźnie ustawionofalselub utworzono kampanię Performance Max do celów związanych z podróżami), po której następuje maksymalnie 999 operacjiCampaignAssetOperation(create) kierowanych na tę samą kampanięCampaign(jeśli jakakolwiek operacja w grupie się nie powiedzie, wystąpi błądBatchJobError.CAMPAIGN_AND_CAMPAIGN_ASSET_TRANSACTION_FAILURE). Kampanie Performance Max dla handlu detalicznego (z plikiem danych Merchant Center) można tworzyć bez łączenia zasobów markiCampaignAssetw tej samej niepodzielnej podgrupie.
W przypadku podzbiorów tworzenia AssetGroup i kampanii Performance Max Campaign (łącznie do 1000 operacji na podzbiór; wszystkie operacje podrzędne create powyżej 999 są przenoszone do następnego niepodzielnego podzbioru):
- Nadrzędna operacja
create(resource_namenaAssetGrouplubCampaign) i jej kolejne podrzędne operacjecreate(asset_groupnaAssetGroupAssetlubcampaignnaCampaignAsset) muszą określać ten sam ujemny tymczasowy identyfikator. - Umieść wszystkie wymagane operacje
AssetOperation(create) dla nowych zasobówAssetprzed nadrzędną operacjąAssetGroupOperationlubCampaignOperation(create), nigdy między nadrzędną operacjącreatea jej podrzędnymi operacjamicreate(co spowodowałoby natychmiastowe zamknięcie niepodzielnej podgrupy i oddzielenie tworzenia zasobu nadrzędnego od połączonych z nim zasobów).
Gdy nie powiedzie się podrzędna operacja wsadowa, BatchJobResult.status operacji, która spowodowała błąd, zawiera błąd weryfikacji, a pozostałe operacje w tej podrzędnej operacji wsadowej są wycofywane z odpowiednim błędem transakcji. Sprawdź sąsiednie wpisy BatchJobResult, które mają ten sam identyfikator AdGroup, AssetGroup lub Campaign, aby zidentyfikować główną przyczynę błędu.
Jeśli powiązane operacje w którejkolwiek z tych grup nie zostaną dodane kolejno, interfejs Google Ads API podzieli je na osobne podzbiory, co spowoduje, że modyfikacja nie spełni minimalnych wymagań dotyczących komponentów lub pozostawi niekompletne drzewa grup informacji o produktach. Więcej informacji znajdziesz w artykułach Używanie filtrów grup informacji o produktach w zadaniach wsadowych i Przetwarzanie wsadowe w kampaniach Performance Max.
Grupowanie logiczne
Podczas modyfikowania hierarchii kierowania na produkty (AssetGroupListingGroupFilterOperation w kampaniach Performance Max lub AdGroupCriterionOperation w kampaniach produktowych) lub tworzenia nowej grupy reklam (AssetGroup) lub grupy komponentów kampanii Performance Max (Campaign) grupuj kolejno wszystkie operacje kierowane na ten sam zasób nadrzędny (AssetGroup, AdGroup lub Campaign). Zmniejsza to rywalizację o blokadę backendu i utrzymuje współzależne drzewa razem.
Spójność danych
Drzewa filtrów grup informacji o produktach i wymagania dotyczące komponentów kampanii Performance Max są sprawdzane na końcu każdej niepodzielnej transakcji podzbioru, dlatego unikaj dzielenia aktualizacji tego samego zasobu nadrzędnego na nieciągłe zakresy w ramach zadania lub między równoczesnymi zadaniami.
Unikanie problemów z równoczesnością
Podczas przesyłania wielu równoczesnych zadań na to samo konto staraj się zmniejszyć prawdopodobieństwo, że zadania będą działać na tych samych obiektach w tym samym czasie, jeśli utrzymujesz duże rozmiary zadań. Wiele niedokończonych zadań, które mają stan
RUNNING, próbuje zmieniać ten sam zestaw obiektów, co może prowadzić do sytuacji podobnych do zakleszczenia, powodujących znaczne spowolnienie, a nawet niepowodzenie zadań.Nie przesyłaj wielu operacji, które zmieniają ten sam obiekt w tym samym zadaniu, ponieważ wynik może być nieprzewidywalny.
Optymalne pobieranie wyników
Nie sprawdzaj stanu zadania zbyt często, ponieważ możesz przekroczyć limit liczby żądań.
Podczas wywoływania metody
ListBatchJobResultsnie ustawiaj parametrupage_size(lub ustaw go na maksymalną wartość1000), aby zminimalizować liczbę operacji stronicowania w obie strony. Parametrresponse_content_typeustaw na wartośćMUTABLE_RESOURCEtylko wtedy, gdy aplikacja sprawdza zwrócone pola zasobów inne niżresource_name.Kolejność wyników jest taka sama jak kolejność przesyłania.
Dodatkowe wskazówki dotyczące użytkowania
Możesz ustawić górną granicę czasu, przez jaki zadanie wsadowe może być wykonywane, zanim zostanie anulowane. Podczas tworzenia nowego zadania wsadowego ustaw w polu
metadata.execution_limit_secondspreferowany limit czasu w sekundach. Jeśli nie ustawisz właściwościmetadata.execution_limit_seconds, nie będzie domyślnego limitu czasu.Chociaż limit protokołu wynosi 10 000 operacji na żądanie, zalecamy dodawanie nie więcej niż 1000 operacji na
AddBatchJobOperationsRequesti używaniesequence_tokendo przesyłania pozostałych operacji do tego samego zadania. W zależności od rozmiaru operacji wysłanie zbyt wielu operacji w jednymAddBatchJobOperationsRequestmoże spowodować błądBatchJobError.REQUEST_TOO_LARGE. Możesz rozwiązać ten problem, zmniejszając liczbę operacji i ponawiając próbęAddBatchJobOperationsRequest.
Ograniczenia
Każde
BatchJobobsługuje do miliona operacji. Przekroczenie tego limitu podczas wywoływaniaAddBatchJobOperationszwraca błądResourceCountLimitExceededError.RESOURCE_LIMIT(zResourceLimitType.BATCH_JOB_OPERATIONS_PER_JOBwErrorDetails.resource_count_details).Każde konto może mieć jednocześnie do 100 aktywnych lub oczekujących zadań. Przekroczenie tego limitu podczas tworzenia zadania wsadowego za pomocą
MutateBatchJobpowoduje zwrócenie błęduResourceCountLimitExceededError.RESOURCE_LIMIT(zResourceLimitType.BATCH_JOBS_PER_CUSTOMERwErrorDetails.resource_count_details).Zadania oczekujące od ponad 7 dni są automatycznie usuwane.
Każda metoda
AddBatchJobOperationsRequestma sztywny limit 10 000 operacji mutacji na żądanie. Przekroczenie 10 000 operacji w jednym żądaniu powoduje błądBatchJobError.REQUEST_TOO_LARGE.W polu
page_sizewListBatchJobResultsRequest:- Jeśli parametr
page_sizenie jest ustawiony lub ma wartość0, domyślnie przyjmuje wartość maksymalną1000. - Jeśli wartość
page_sizeprzekracza1000lub jest mniejsza niż0, interfejs API zwraca błądBatchJobError.INVALID_PAGE_SIZE.
- Jeśli parametr
Każde
AddBatchJobOperationsRequestmoże mieć maksymalnie 41 937 920 bajtów. Jeśli przekroczysz ten limit, otrzymasz błądBatchJobError.REQUEST_TOO_LARGE(lubINTERNAL_ERROR, jeśli odrzucenie nastąpiło w warstwie transportowej). Możesz określić rozmiar żądania przed jego przesłaniem i podjąć odpowiednie działania, jeśli jest ono zbyt duże: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));
Rozmiar pojedynczej operacji zmiany
Chociaż łączny rozmiar żądania może wynosić do 41 937 920 bajtów, zserializowany rozmiar pojedynczego elementu MutateOperation w ramach zbioru jest ograniczony do 10 484 504 bajtów (10 MiB minus 1256 bajtów). Przekroczenie tego limitu powoduje błąd BatchJobError.REQUEST_TOO_LARGE. Pamiętaj, że chociaż dokumentacja referencyjna BatchJobError.REQUEST_TOO_LARGE podaje próg 10 484 504 bajtów, AddBatchJobOperations zwraca ten sam kod błędu, gdy zostanie przekroczony dowolny z 3 progów żądania (41 937 920 bajtów na żądanie, 10 484 504 bajtów na operację lub 10 000 operacji na wywołanie). Pole message błędu określa, który limit został przekroczony.