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