Considere estas diretrizes ao usar
BatchJobService
.
Melhorar a capacidade de processamento
É preferível ter menos jobs maiores em vez de muitos jobs menores.
Ordenar operações enviadas por tipo de operação. Por exemplo, se sua tarefa contiver operações para adicionar campanhas, grupos de anúncios e critérios de grupos de anúncios, organize as operações no upload para que todas as operações de campanhas sejam primeiro, seguidas por todas as operações do grupo de anúncios e, por fim, todas as operações de critérios dos grupos de anúncios.
Dentro de operações do mesmo tipo, ele pode melhorar o desempenho para agrupá-las por recurso pai. Por exemplo, se você tiver uma série de objetos
AdGroupCriterionOperation
, pode ser mais eficiente agrupar operações por grupo de anúncios do que combinar operações que afetam os critérios do grupo em diferentes grupos.
Evitar problemas de simultaneidade
Ao enviar vários jobs simultâneos para a mesma conta, tente reduzir a probabilidade de eles operarem nos mesmos objetos ao mesmo tempo, mantendo grandes tamanhos de jobs. Várias tarefas incompletas (com status de
RUNNING
) que tentam modificar o mesmo conjunto de objetos podem levar a condições de impasse, resultando em uma severa lentidão e até mesmo falhas nas tarefas.Não envie várias operações que mudam o mesmo objeto no mesmo job, já que o resultado pode ser imprevisível.
Recuperar os resultados da maneira ideal
Não pesquise o status do job com muita frequência para não correr o risco de atingir erros de limite de taxa.
Não recupere mais de mil resultados por página. O servidor pode retornar menos que isso devido à carga ou a outros fatores.
A ordem dos resultados será igual à ordem de upload.
Orientações de uso adicionais
É possível definir um limite superior para o período em que um job em lote pode ser executado antes de ser cancelado. Ao criar um novo job em lote, defina o campo
metadata.execution_limit_seconds
com seu limite de tempo preferido, em segundos. Não haverá limite de tempo padrão semetadata.execution_limit_seconds
não for definido.É recomendável adicionar no máximo 1.000 operações por
AddBatchJobOperationsRequest
e usarsequence_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 solucionar esse erro, reduza o número de operações e tenteAddBatchJobOperationsRequest
novamente.
Limitações
Cada
BatchJob
aceita até um milhão de operações.Cada conta pode ter até 100 trabalhos ativos ou pendentes ao mesmo tempo.
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ê ultrapassar esse limite, receberá umaINTERNAL_ERROR
. É possível determinar o tamanho da solicitação antes de enviá-la e tomar as medidas apropriadas 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);