Práticas recomendadas e limitações

Considere estas diretrizes ao usar BatchJobService

Melhorar a capacidade de processamento

  • É preferível ter menos vagas maiores do que muitas tarefas menores.

  • Ordenar operações enviadas por tipo de operação. Por exemplo, se seu trabalho contém operações para adicionar campanhas, grupos de anúncios e critérios de grupos de anúncios, ordenar as operações em seu upload para que toda a campanha operações são as primeiras, seguidas por todas as operações do grupo de anúncios e, por fim, operações de critério do grupo de anúncios.

  • Dentro de operações do mesmo tipo, agrupá-las pode melhorar o desempenho por recurso pai. Por exemplo, se você tiver uma série de AdGroupCriterionOperation, pode ser mais eficiente agrupar operações por grupo de anúncios, em vez de misturar operações que afetam a critérios de grupo em grupos de anúncios diferentes.

Evitar problemas de simultaneidade

  • Ao enviar vários jobs simultâneos para a mesma conta, tente reduzir a probabilidade de os jobs operarem nos mesmos objetos ao mesmo tempo, enquanto e manter tamanhos de trabalho grandes. Muitos trabalhos não concluídos (com status de RUNNING) que tentar mutar o mesmo conjunto de objetos pode levar a condições de impasse resultando em grande lentidão e até mesmo falhas em jobs.

  • Não envie várias operações que mudam o mesmo objeto da mesma job, já que o resultado pode ser imprevisível.

Recuperar os resultados de maneira otimizada

  • Não pesquise o status do job com muita frequência para não correr o risco de atingir o limite de taxa erros.

  • Não recupere mais de mil resultados por página. O servidor pode retornar devido à carga ou a outros fatores.

  • A ordem dos resultados será a mesma que a ordem de upload.

Outras orientações de uso

  • É possível definir um limite superior para o período em que um job em lote pode ser executado antes de que está sendo cancelado. Ao criar uma nova tarefa em lote, defina o metadata.execution_limit_seconds para o limite de tempo que preferir, em segundos. Não há tempo padrão limite se metadata.execution_limit_seconds não estiver definido.

  • Não é recomendável adicionar mais de 1.000 operações por AddBatchJobOperationsRequest e use o método sequence_token para fazer o upload do restante das operações para a mesma tarefa. Dependendo conteúdo das operações, muitas operações em uma AddBatchJobOperationsRequest pode causar um erro REQUEST_TOO_LARGE. Você pode lidar com esse erro reduzindo o número de operações e tentando AddBatchJobOperationsRequest:

Limitações

  • Cada BatchJob aceita até um milhão as operações.

  • Cada conta pode ter até 100 tarefas ativas ou pendentes ao mesmo tempo.

  • As tarefas pendentes com mais de sete dias serão removidas automaticamente.

  • Cada AddBatchJobOperationsRequest tem um tamanho máximo de 10.484.504 bytes. Se você exceder esse limite, receberá um INTERNAL_ERROR. É possível determinar o tamanho da solicitação antes enviar e tomar as medidas apropriadas se forem muito grandes.

    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);