Sprawdzone metody i ograniczenia

Podczas korzystania z BatchJobService weź pod uwagę te wskazówki.

Zwiększanie przepustowości

  • Lepiej jest wykonać mniej większych zadań niż wiele mniejszych.

  • Sortowanie przesłanych operacji według typu operacji. Jeśli np. zadanie zawiera operacje dodawania kampanii, grup reklam i kryteriów grup reklam, uporządkuj operacje w przesyłanych danych tak, aby najpierw znalazły się 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 może to poprawić wydajność, jeśli zostaną one pogrupowane według zasobu nadrzędnego. Jeśli np. masz serię obiektów AdGroupCriterionOperation, możesz efektywniej grupować operacje według grup reklam zamiast mieszać operacje, które wpływają na kryteria grup reklam w różnych grupach reklam.

Unikanie problemów z jednoczesnym wykonywaniem

  • Przesyłając wiele zadań jednocześnie na tym samym koncie, postaraj się zmniejszyć prawdopodobieństwo, że zadania będą działać na tych samych obiektach w tym samym czasie, zachowując przy tym duże rozmiary zadań. Wiele niedokończonych zadań o stanie RUNNING próbuje zmodyfikować ten sam zestaw obiektów, co może prowadzić do sytuacji podobnych do blokady, powodując poważne 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 szybkości i wygenerować błędy.

  • Nie pobieraj więcej niż 1000 wyników na stronę. Serwer może zwrócić mniej niż 100% z powodu obciążenia lub innych czynników.

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

Dodatkowe wskazówki dotyczące użytkowania

  • Możesz ustawić górną granicę czasu, przez jaki może działać zadanie zbiorcze, zanim zostanie anulowane. Podczas tworzenia nowego zadania zbiorczego ustaw pole metadata.execution_limit_seconds na preferowany limit czasu w sekundach. Jeśli nie ustawisz parametru metadata.execution_limit_seconds, domyślny limit czasu nie będzie obowiązywał.

  • Zalecamy dodanie nie więcej niż 1000 operacji na AddBatchJobOperationsRequest i użycie opcji sequence_token,aby przesłać pozostałe operacje do tego samego zadania. W zależności od treści operacji zbyt duża liczba operacji w pojedynczym AddBatchJobOperationsRequest może spowodować błąd REQUEST_TOO_LARGE. Możesz rozwiązać ten problem, zmniejszając liczbę operacji i ponownie próbując wykonać tę czynność.AddBatchJobOperationsRequest

Ograniczenia

  • Każdy element BatchJob obsługuje do miliona operacji.

  • Każde konto może mieć jednocześnie maksymalnie 100 aktywych lub oczekujących zadań.

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

  • Każdy plik AddBatchJobOperationsRequest ma maksymalny rozmiar 10 484 504 bajtów. Jeśli przekroczysz ten limit, otrzymasz INTERNAL_ERROR. Przed przesłaniem możesz określić rozmiar żądania i w razie potrzeby podjąć 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);