Best practice e limitazioni

Tieni in considerazione queste linee guida quando utilizzi BatchJobService.

Migliorare il throughput

  • È preferibile un numero ridotto di job di grandi dimensioni rispetto a molti job di piccole dimensioni.

  • Ordina le operazioni caricate per tipo di operazione. Ad esempio, se il tuo job contiene operazioni per aggiungere campagne, gruppi di annunci e criteri di gruppo di annunci, ordina le operazioni nel caricamento in modo che tutte le operazioni di campagna vengano visualizzate per prime, seguite da tutte le operazioni di gruppo di annunci e infine da tutte le operazioni di criterio di gruppo di annunci.

  • All'interno di operazioni dello stesso tipo, raggrupparle per risorsa principale può migliorare le prestazioni. Ad esempio, se hai una serie di oggettiAdGroupCriterionOperation, può essere più efficiente raggruppare le operazioni per gruppo di annunci anziché mescolare operazioni che influiscono sui criteri dei gruppi di annunci in gruppi di annunci diversi.

Evitare problemi di concorrenza

  • Quando invii più job simultanei per lo stesso account, cerca di ridurre la probabilità che i job operino sugli stessi oggetti contemporaneamente, mantenendo al contempo dimensioni elevate dei job. Molti job incompiuti, che hanno lo stato RUNNING, tentano di modificare lo stesso insieme di oggetti, il che può portare a condizioni simili a deadlock con conseguenti rallentamenti gravi e persino errori nei job.

  • Non inviare più operazioni che modificano lo stesso oggetto nello stesso job, poiché il risultato può essere imprevedibile.

Recuperare i risultati in modo ottimale

  • Non eseguire il polling dello stato del job troppo di frequente, altrimenti rischi di riscontrare errori di limitazione di frequenza.

  • Non recuperare più di 1000 risultati per pagina. Il server potrebbe restituirne meno a causa del carico o di altri fattori.

  • L'ordine dei risultati sarà lo stesso dell'ordine di caricamento.

Ulteriori indicazioni per l'utilizzo

  • Puoi impostare un limite superiore per il tempo di esecuzione consentito per un job batch prima che venga annullato. Quando crei un nuovo job batch, imposta il campo metadata.execution_limit_seconds sul limite di tempo che preferisci, in secondi. Se metadata.execution_limit_seconds non è impostato, non è previsto alcun limite di tempo predefinito.

  • Ti consigliamo di aggiungere non più di 1000 operazioni per AddBatchJobOperationsRequest e di utilizzare sequence_token per caricare il resto delle operazioni nello stesso job. A seconda del contenuto delle operazioni, troppe operazioni in un singolo AddBatchJobOperationsRequest potrebbero causare un errore REQUEST_TOO_LARGE. Puoi gestire questo errore riducendo il numero di operazioni e riprovando con AddBatchJobOperationsRequest.

Limitazioni

  • Ogni BatchJob supporta fino a un milione di operazioni.

  • Ogni account può avere fino a 100 job attivi o in attesa contemporaneamente.

  • I job in attesa risalenti a più di 7 giorni prima della data corrente vengono rimossi automaticamente.

  • Ogni AddBatchJobOperationsRequest ha una dimensione massima di 10.484.504 byte. Se superi questo limite, riceverai un INTERNAL_ERROR. Puoi determinare le dimensioni della richiesta prima di inviarla e intraprendere le azioni appropriate se è troppo 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);