Considere estas diretrizes ao usar o BatchJobService
.
Melhorar a capacidade
É melhor ter menos jobs maiores do que muitos jobs menores.
Ordene as operações enviadas por upload por tipo de operação. Por exemplo, se o trabalho contiver operações para adicionar campanhas, grupos de anúncios e critérios de grupo de anúncios, ordene as operações no upload para que todas as operações de campanha sejam primeiro, seguidas por todas as operações de grupo de anúncios e, por fim, todas as operações de critério de grupo de anúncios.
Em operações do mesmo tipo, é possível melhorar o desempenho agrupando-as por recurso principal. Por exemplo, se você tiver uma série de objetos
AdGroupCriterionOperation
, poderá ser mais eficiente agrupar operações por grupo de anúncios em vez de misturar operações que afetam critérios de grupo de anúncios em diferentes grupos.
Evitar problemas de simultaneidade
Ao enviar vários jobs simultâneos para a mesma conta, tente reduzir a probabilidade de jobs operarem nos mesmos objetos ao mesmo tempo, mantendo tamanhos grandes de jobs. Muitos jobs não concluídos, que têm o status
RUNNING
, tentam mudar o mesmo conjunto de objetos, o que pode levar a condições semelhantes a deadlock, resultando em lentidão grave e até mesmo falhas de jobs.Não envie várias operações que mudam o mesmo objeto no mesmo job, porque o resultado pode ser imprevisível.
Recuperar resultados de maneira ideal
Não consulte o status do trabalho com muita frequência para não atingir erros de limitação de taxa.
Não recupere mais de mil resultados por página. O servidor pode retornar menos do que isso devido à carga ou a outros fatores.
A ordem dos resultados será a mesma da ordem de envio.
Outras orientações de uso
É possível definir um limite máximo para a duração de um job em lote antes de ser cancelado. Ao criar um job em lote, defina o campo
metadata.execution_limit_seconds
para o limite de tempo preferido, em segundos. Não há um limite de tempo padrão semetadata.execution_limit_seconds
não estiver definido.Recomendamos adicionar no máximo 1.000 operações por
AddBatchJobOperationsRequest
e usar osequence_token
para fazer upload do restante das operações para o mesmo job. Dependendo do conteúdo das operações, muitas operações em um únicoAddBatchJobOperationsRequest
podem causar um erroREQUEST_TOO_LARGE
. Para corrigir esse erro, reduza o número de operações e tente novamente oAddBatchJobOperationsRequest
.
Limitações
Cada
BatchJob
aceita até um milhão de operações.Cada conta pode ter até 100 jobs ativos ou pendentes ao mesmo tempo.
Os jobs pendentes com mais de sete dias são removidos automaticamente.
Cada
AddBatchJobOperationsRequest
tem um tamanho máximo de 10.484.504 bytes. Se você exceder esse limite, vai receber umINTERNAL_ERROR
. É possível determinar o tamanho da solicitação antes de enviar e tomar as medidas adequadas se ela for muito grande.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()
Ruby
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;
.NET
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);