При использовании 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);