Лучшие практики и ограничения

Учитывайте эти рекомендации при использовании BatchJobService .

Повышение пропускной способности

  • Меньшее количество крупных рабочих мест предпочтительнее множества мелких рабочих мест.

  • Упорядочите загруженные операции по типу операции. Например, если ваше задание содержит операции по добавлению кампаний, групп объявлений и критериев групп объявлений, расположите операции в загрузке так, чтобы сначала были все операции кампании , затем все операции группы объявлений и, наконец, все операции группы объявлений. критериальные операции .

  • В операциях одного типа можно повысить производительность, сгруппировав их по родительскому ресурсу. Например, если у вас есть ряд объектов AdGroupCriterionOperation , может быть более эффективно группировать операции по группам объявлений, а не смешивать операции, которые влияют на критерии группы объявлений в разных группах объявлений.

Избегайте проблем с параллелизмом

  • При отправке нескольких одновременных заданий для одной и той же учетной записи постарайтесь снизить вероятность одновременной работы заданий с одними и теми же объектами, сохраняя при этом большие размеры заданий. Многие незавершенные задания, имеющие статус RUNNING , пытаются изменить один и тот же набор объектов, что может привести к состояниям, подобным тупику, что приводит к серьезному замедлению работы и даже к сбоям в работе.

  • Не отправляйте несколько операций, которые изменяют один и тот же объект в одном задании, поскольку результат может быть непредсказуемым.

Оптимальное получение результатов

  • Не проверяйте статус задания слишком часто, иначе вы рискуете столкнуться с ошибками ограничения скорости.

  • Не получайте более 1000 результатов на страницу. Сервер может вернуть меньшее количество данных из-за нагрузки или других факторов.

  • Порядок результатов будет таким же, как и порядок загрузки.

Дополнительные рекомендации по использованию

  • Вы можете установить верхнюю границу времени, в течение которого пакетное задание может выполняться до его отмены. При создании нового пакетного задания установите в поле metadata.execution_limit_seconds желаемое ограничение по времени в секундах. Ограничение по времени по умолчанию отсутствует, если не задан metadata.execution_limit_seconds .

  • Рекомендуется добавлять не более 1000 операций на каждый AddBatchJobOperationsRequest и использовать sequence_token для загрузки остальных операций в то же задание. В зависимости от содержимого операций слишком много операций в одном AddBatchJobOperationsRequest может привести к ошибке REQUEST_TOO_LARGE . Эту ошибку можно устранить, уменьшив количество операций и повторив AddBatchJobOperationsRequest .

Ограничения

  • Каждое BatchJob поддерживает до миллиона операций.

  • В каждой учетной записи одновременно может быть до 100 активных или ожидающих заданий.

  • Ожидающие задания старше 7 дней автоматически удаляются.

  • Максимальный размер каждого AddBatchJobOperationsRequest составляет 10 484 504 байта. Если вы превысите это значение, вы получите INTERNAL_ERROR . Вы можете определить размер запроса перед отправкой и принять соответствующие меры, если он слишком велик.

    Ява

    
    static final int MAX_REQUEST_BYTES = 10_484_504;
    
    ... (code to get the request object)
    
    int sizeInBytes = request.getSerializedSize();
    

    Питон

    
    from google.ads.googleads.client import GoogleAdsClient
    
    MAX_REQUEST_BYTES = 10484504
    
    ... (code to get the request object)
    
    size_in_bytes = request._pb.ByteSize()
    

    Руби

    
    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;
    

    .СЕТЬ

    
    using Google.Protobuf;
    const int MAX_REQUEST_BYTES = 10484504;
    
    ... (code to get the request object)
    
    int sizeInBytes = request.ToByteArray().Length;
    

    Перл

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