Sprawdzone metody i ograniczenia

Podczas korzystania z funkcji BatchJobService pamiętaj o tych wskazówkach.

Zwiększanie przepustowości

  • Preferowane jest mniejsza liczba większych zadań niż wiele mniejszych.

  • Uporządkuj przesłane operacje według typu operacji. Jeśli np. zadanie zawiera operacje dodawania kampanii, grup reklam i kryteriów grupy reklam, uporządkuj operacje w przesył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 grupy reklam.

  • W przypadku operacji tego samego typu można zwiększyć wydajność, grupując je według zasobu nadrzędnego. Jeśli na przykład masz serię AdGroupCriterionOperationobiektów, bardziej efektywne może być grupowanie operacji według grupy reklam niż mieszanie operacji, które wpływają na kryteria grupy reklam w różnych grupach reklam.

Unikanie problemów z jednoczesnoś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, przy jednoczesnym zachowaniu dużych rozmiarów zadań. Wiele niedokończonych zadań o stanie 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 modyfikują 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że to spowodować błędy związane z limitem liczby żądań.

  • Nie pobieraj więcej niż 1000 wyników na stronę. Serwer może zwrócić mniejszą liczbę wyników 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 zadanie wsadowe może być wykonywane, zanim zostanie anulowane. Podczas tworzenia nowego zadania wsadowego ustaw w polu metadata.execution_limit_seconds preferowany limit czasu w sekundach. Jeśli nie ustawisz wartości metadata.execution_limit_seconds, nie będzie domyślnego limitu czasu.

  • Zalecamy dodawanie nie więcej niż 1000 operacji na AddBatchJobOperationsRequest i używanie sequence_token do przesyłania pozostałych operacji do tego samego zadania. W zależności od zawartości operacji zbyt duża liczba operacji w jednym AddBatchJobOperationsRequest może spowodować błąd REQUEST_TOO_LARGE. Możesz rozwiązać ten problem, zmniejszając liczbę operacji i ponawiając próbę wykonania AddBatchJobOperationsRequest.

Ograniczenia

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

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

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

  • Każdy AddBatchJobOperationsRequest może mieć maksymalnie 10 484 504 bajty. Jeśli przekroczysz ten limit, otrzymasz INTERNAL_ERROR. 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 = 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);