При использовании BatchJobService учитывайте следующие рекомендации.
Повышение пропускной способности
Чем меньше крупных заказов, тем предпочтительнее множество мелких.
Упорядочите загружаемые операции по типу операции. Например, если ваша задача содержит операции по добавлению кампаний, групп объявлений и критериев групп объявлений, упорядочите операции в загружаемом файле так, чтобы сначала были операции по кампаниям , затем все операции по группам объявлений и, наконец, все операции по критериям групп объявлений .
Внутри операций одного типа группировка по родительскому ресурсу может повысить производительность. Например, если у вас есть серия объектов
AdGroupCriterionOperation, более эффективно будет группировать операции по группам объявлений, а не смешивать операции, влияющие на критерии групп объявлений в разных группах.
Атомарность при разделении пакетов
API Google Ads может разбить операции в отправленном пакетном задании на более мелкие подпакеты для обработки. Если вы не группируете связанные операции, такие как отображение изменений групп в рамках AssetGroup и AdGroup , последовательно в рамках пакетного задания, API Google Ads может разбить эти операции на разные подпакеты. Такое разделение может либо привести к сбою всего процесса изменения, либо оставить аккаунт в несогласованном состоянии.
Логическая группировка
AssetGroupListingGroupFilterOperation управляет группами объявлений внутри AssetGroup , что часто встречается в кампаниях Performance Max. AdGroupCriterionOperation управляет группами объявлений внутри AdGroup , что часто встречается в стандартных торговых кампаниях. Обе операции используются для определения таргетинга по товарам. Если вы вносите изменения, влияющие на иерархию таргетинга по товарам в обоих контекстах, сгруппируйте эти операции последовательно в пакетном задании, чтобы гарантировать их одновременное применение.
Согласованность данных
Для обеспечения согласованности данных и предотвращения частичных обновлений добавляйте операции по группировке связанных объявлений последовательно в пакетное задание. Такой порядок помогает группировать их в атомарные подпакеты с помощью логики разделения пакетов API, что предотвращает оставление вашей учетной записи в несогласованном состоянии.
Избегайте проблем, связанных с параллельным доступом.
При одновременной отправке нескольких заданий для одной учетной записи старайтесь уменьшить вероятность того, что задания будут работать с одними и теми же объектами одновременно, сохраняя при этом большой размер заданий. Многие незавершенные задания со статусом
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. Вы можете определить размер запроса перед отправкой и предпринять соответствующие действия, если он окажется слишком большим.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()Руби
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;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);