Práticas recomendadas e limitações

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 se metadata.execution_limit_seconds não estiver definido.

  • É recomendável adicionar no máximo 1.000 operações por AddBatchJobOperationsRequest e usar o sequence_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 única AddBatchJobOperationsRequest podem causar um erro REQUEST_TOO_LARGE. É possível processar esse erro reduzindo o número de operações e tentando novamente o AddBatchJobOperationsRequest.

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á um INTERNAL_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);