Prácticas recomendadas y limitaciones

Ten en cuenta estos lineamientos cuando uses BatchJobService

Mejora la capacidad de procesamiento

  • Se prefieren menos trabajos grandes en lugar de muchos trabajos más pequeños.

  • Ordena las operaciones subidas según el tipo de operación. Por ejemplo, si tu trabajo contiene operaciones para agregar campañas, grupos de anuncios y criterios de grupos de anuncios, ordenar las operaciones en la carga para que todas las campañas operaciones están primero, seguidas de todas las operaciones del grupo de anuncios y, por último, operaciones de criterios de grupos de anuncios.

  • Dentro de operaciones del mismo tipo, se puede mejorar el rendimiento si se agrupan por recurso superior. Por ejemplo, si tienes una serie de AdGroupCriterionOperation, puede ser más eficiente agrupar las operaciones por grupo de anuncios, en vez de combinar las operaciones que afectan los criterios de un grupo en diferentes grupos de anuncios.

Evita problemas de simultaneidad

  • Cuando envíes varios trabajos simultáneos para la misma cuenta, intenta reducir la probabilidad de que los trabajos operen en los mismos objetos al mismo tiempo, mientras que y mantener trabajos de gran tamaño. Muchos trabajos sin terminar (con el estado de RUNNING) que Si intentas mutar, el mismo conjunto de objetos puede generar condiciones similares a un interbloqueo. lo que provocaría una demora grave o incluso fracasos del trabajo.

  • No envíes varias operaciones que cambien el mismo objeto en la misma el trabajo, y el resultado puede ser impredecible.

Recupera resultados de manera óptima

  • No consultes el estado del trabajo con demasiada frecuencia o corres el riesgo de alcanzar el límite de frecuencia. errores.

  • No recuperes más de 1,000 resultados por página. El servidor podría mostrar menos que eso debido a la carga o a otros factores.

  • El orden de los resultados será el mismo que el de la carga.

Orientación adicional sobre el uso

  • Puedes establecer un límite superior para el tiempo que puede ejecutarse un trabajo por lotes se está cancelando. Cuando crees un nuevo trabajo por lotes, configura metadata.execution_limit_seconds al límite de tiempo que prefieras, en segundos. No hay una hora predeterminada límite si no se establece metadata.execution_limit_seconds.

  • Se recomienda no agregar más de 1,000 operaciones AddBatchJobOperationsRequest y utiliza el sequence_token subir el resto de las operaciones al mismo trabajo. Según el contenido de las operaciones, demasiadas operaciones en una sola AddBatchJobOperationsRequest podría causar un error REQUEST_TOO_LARGE. Tú puede manejar este error reduciendo la cantidad de operaciones y reintentando AddBatchJobOperationsRequest

Limitaciones

  • Cada BatchJob admite hasta un millón las operaciones.

  • Cada cuenta puede tener hasta 100 trabajos activos o pendientes al mismo tiempo.

  • Se quitan automáticamente los trabajos pendientes de más de 7 días.

  • Cada AddBatchJobOperationsRequest con un tamaño máximo de 10,484,504 bytes. Si superas este límite, recibirás un objeto INTERNAL_ERROR. Puedes determinar el tamaño de la solicitud antes enviar y tomar las medidas adecuadas si es demasiado 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()
    

    Rita

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