Учитывайте эти рекомендации при использовании 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);