При использовании BatchJobService учитывайте следующие рекомендации.
Улучшить пропускную способность
Предпочтительнее выполнять несколько крупных работ, чем несколько мелких.
Упорядочьте загруженные операции по типу. Например, если ваше задание содержит операции по добавлению кампаний, групп объявлений и критериев групп объявлений, упорядочите операции в загрузке так, чтобы все операции кампаний были первыми, затем все операции групп объявлений , а затем все операции критериев групп объявлений .
Группировка операций одного типа по родительскому ресурсу может повысить производительность. Например, если у вас есть серия объектов
AdGroupCriterionOperation, может быть эффективнее группировать операции по группам объявлений, чем смешивать операции, влияющие на критерии групп объявлений, в разных группах.
Избегайте проблем с параллелизмом
При отправке нескольких одновременных заданий для одной учётной записи старайтесь снизить вероятность одновременного выполнения заданий с одними и теми же объектами, сохраняя при этом большой размер заданий. Многие незавершённые задания со статусом
RUNNING) пытаются изменить один и тот же набор объектов, что может привести к ситуациям, подобным взаимоблокировке, приводящим к серьёзному замедлению работы и даже сбоям заданий.Не отправляйте несколько операций, изменяющих один и тот же объект, в одно и то же задание, так как результат может быть непредсказуемым.
Оптимальное получение результатов
Не опрашивайте статус задания слишком часто, иначе вы рискуете столкнуться с ошибками, превышающими лимит.
Не загружайте более 1000 результатов на страницу. Сервер может вернуть меньшее количество результатов из-за нагрузки или других факторов.
Порядок результатов будет таким же, как и порядок загрузки.
Дополнительные рекомендации по использованию
Вы можете установить верхнюю границу времени выполнения пакетного задания до его отмены. При создании нового пакетного задания укажите в поле
metadata.execution_limit_secondsжелаемое ограничение по времени в секундах. Еслиmetadata.execution_limit_secondsне задано, ограничения по времени по умолчанию нет.Рекомендуется добавлять не более 1000 операций на один запрос
AddBatchJobOperationsRequestи использоватьsequence_tokenдля загрузки оставшихся операций в то же задание. В зависимости от содержимого операций, слишком большое количество операций в одномAddBatchJobOperationsRequestможет привести к ошибкеREQUEST_TOO_LARGE. Эту ошибку можно устранить, уменьшив количество операций и повторив запросAddBatchJobOperationsRequest.
Ограничения
Каждый
BatchJobподдерживает до одного миллиона операций.Каждая учетная запись может иметь до 100 активных или отложенных заданий одновременно.
Ожидающие задания старше 7 дней автоматически удаляются.
Начиная с версии 22 каждый запрос
AddBatchJobOperationsимеет ограничение в 10 000 операций мутации на запрос.Начиная с версии 22, для поля
page_sizeвListBatchJobResultsRequest:- Если
page_sizeне задан или равен 0, по умолчанию используется максимальное значение 1000. - Если
page_sizeпревышает 1000 или меньше 0, API возвращает ошибкуINVALID_PAGE_SIZE.
- Если
Максимальный размер каждого
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.bytesizePHP
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);