Sprawdzone metody i ograniczenia

Weź pod uwagę te wskazówki, gdy używasz BatchJobService

Zwiększ przepustowość

  • Preferowana jest mniejsza liczba większych zadań zamiast wielu mniejszych.

  • Uporządkuj przesłane operacje według typu operacji. Jeśli na przykład Twoje stanowisko zawiera operacje dodawania kampanii, grup reklam i kryteriów grup reklam, ułóż operacje w przesłanym pliku tak, aby wszystkie kampanie operacje są pierwsze, a po nich wszystkie działań na poziomie grupy reklam, a na koniec operacji kryterium w grupie reklam.

  • W ramach operacji tego samego typu może to poprawić wydajność ich grupowania według zasobu nadrzędnego. Na przykład, jeśli masz serię AdGroupCriterionOperation obiektów – grupowanie może być skuteczniejsze. działań według grupy reklam, a nie przez mieszanie operacji mających wpływ na reklamę w różnych grupach reklam.

Unikaj problemów z równoczesnością

  • W przypadku przesyłania wielu zadań równoczesnych dla tego samego konta spróbuj ograniczyć liczbę oraz prawdopodobieństwo uruchomienia zadań na tych samych obiektach w tym samym czasie, i pracę na dużą skalę. Wiele nieukończonych zadań (ze stanem RUNNING), który próba przekształcenia tego samego zbioru obiektów może prowadzić do sytuacji przypominającej blokadę wzajemną co może prowadzić do poważnych spowolnień, a nawet do niepowodzenia.

  • Nie przesyłaj wielu operacji, które powodują mutacje tego samego obiektu w tym samym obiekcie pracy, więc rezultaty mogą być nieprzewidywalne.

Optymalne pobieranie wyników

  • Nie przeprowadzaj zbyt częstego sondowania stanu zadania, ponieważ spowoduje to przekroczenie limitu liczby żądań. .

  • Nie pobieraj więcej niż 1000 wyników na stronę. Serwer może zwrócić jest go mniej ze względu na obciążenie lub inne czynniki.

  • Kolejność wyników będzie taka sama jak w przypadku przesyłania.

Dodatkowe wskazówki dotyczące użytkowania

  • Możesz ustawić górną granicę, jak długo może być wykonywane zadanie wsadowe, zanim jest anulowana. Podczas tworzenia nowego zadania wsadowego ustaw parametr metadata.execution_limit_seconds preferowany limit czasu w sekundach. Nie ma domyślnego czasu jeśli nie ustawiono metadata.execution_limit_seconds.

  • Zaleca się dodawanie nie więcej niż 1000 operacji na AddBatchJobOperationsRequest i użyj sequence_token aby przesłać pozostałe operacje do tego samego zadania. W zależności od treści operacji, zbyt wiele operacji w jednym Reguła AddBatchJobOperationsRequest może powodować błąd REQUEST_TOO_LARGE. Ty poradzić sobie z tym błędem, zmniejszając liczbę operacji i ponawiając ponowienie próby AddBatchJobOperationsRequest

Ograniczenia

  • Każda BatchJob obsługuje do miliona operacji.

  • Na każdym koncie może być do 100 aktywnych lub oczekujących zadań jednocześnie.

  • Zadania oczekujące starsze niż 7 dni są automatycznie usuwane.

  • Co AddBatchJobOperationsRequest ma maksymalny rozmiar 10 484 504 bajtów. Po przekroczeniu tego limitu otrzymasz INTERNAL_ERROR. Rozmiar żądania możesz określić przed prześlij ją i w razie potrzeby podejmij odpowiednie działania.

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