Considere estas diretrizes ao usar
BatchJobService
.
Melhorar a capacidade
É preferível ter menos jobs maiores do que muitos jobs menores.
Ordenar as operações enviadas por tipo. Por exemplo, se o job tiver operações para adicionar campanhas, grupos de anúncios e critérios de grupos de anúncios, ordene as operações no upload para que todas as operações de campanha fiquem em primeiro lugar, seguidas por todas as operações de grupos de anúncios e, por fim, todas as operações de critérios de grupos de anúncios.
Em operações do mesmo tipo, é possível melhorar o desempenho ao agrupá-las por recurso pai. Por exemplo, se você tiver uma série de objetos
AdGroupCriterionOperation
, pode ser mais eficiente agrupar as operações por grupo de anúncios, em vez de misturar operações que afetam os critérios de grupos de anúncios em grupos diferentes.
Evitar problemas de simultaneidade
Ao enviar vários jobs simultâneos para a mesma conta, tente reduzir a probabilidade de jobs operando nos mesmos objetos ao mesmo tempo, mantendo o tamanho dos jobs grande. Muitos jobs inacabados, que têm o status de
RUNNING
, tentam modificar o mesmo conjunto de objetos, o que pode levar a condições semelhantes a um bloqueio, resultando em uma lentidão severa e até mesmo em falhas de jobs.Não envie várias operações que modifiquem o mesmo objeto no mesmo job, porque o resultado pode ser imprevisível.
Recuperar resultados de maneira otimizada
Não consulte o status do job com muita frequência, ou você corre o risco de encontrar erros de limite de taxa.
Não extraia mais de mil resultados por página. O servidor pode retornar menos que isso devido ao carregamento ou a outros fatores.
A ordem dos resultados será a mesma do upload.
Outras orientações de uso
É possível definir um limite máximo para o tempo de execução de um job em lote antes de ser cancelado. Ao criar um novo job em lote, defina o campo
metadata.execution_limit_seconds
como o limite de tempo desejado, em segundos. Não há limite de tempo padrão semetadata.execution_limit_seconds
não estiver definido.É recomendável adicionar no máximo 1.000 operações por
AddBatchJobOperationsRequest
e usar osequence_token
para fazer o upload do restante das operações para o mesmo job. Dependendo do conteúdo das operações, muitas delas em uma únicaAddBatchJobOperationsRequest
podem causar um erroREQUEST_TOO_LARGE
. É possível processar esse erro reduzindo o número de operações e tentando 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 7 dias são removidos automaticamente.
Cada
AddBatchJobOperationsRequest
tem um tamanho máximo de 10.484.504 bytes. Se você exceder esse valor, receberá umINTERNAL_ERROR
. Você pode 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);