Best practice e limitazioni

Tieni presenti queste linee guida quando utilizzi BatchJobService

Migliora la velocità effettiva

  • È preferibile un numero minore di lavori di grandi dimensioni rispetto a molti lavori più piccoli.

  • Ordina le operazioni caricate per tipo di operazione. Ad esempio, se il tuo lavoro contiene operazioni per aggiungere criteri per campagne, gruppi di annunci e gruppi di annunci, ordinare le operazioni nel caricamento in modo che tutte le campagne operazioni, seguite da tutte le operazioni dei gruppi di annunci e infine tutto operazioni per i criteri del gruppo di annunci.

  • All'interno di operazioni dello stesso tipo, è possibile migliorare le prestazioni per raggrupparle dalla risorsa padre. Ad esempio, se disponi di una serie AdGroupCriterionOperation oggetti, può essere più efficiente raggruppare operazioni per gruppo di annunci, invece di combinare operazioni che influiscono sull'annuncio in gruppi di annunci diversi.

Evita i problemi di contemporaneità

  • Quando invii più job simultanei per lo stesso account, prova a ridurre la probabilità che i job operino sugli stessi oggetti contemporaneamente, mentre e mantenere job di grandi dimensioni. Molti lavori non completati (con stato RUNNING) che provare a mutare lo stesso insieme di oggetti può portare a condizioni simili a un deadlock causando gravi rallentamenti e persino errori dei job.

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

Recupera i risultati in modo ottimale

  • Non eseguire sondaggi troppo frequenti sullo stato del job, altrimenti rischi di raggiungere il limite di frequenza errori.

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

  • L'ordine dei risultati sarà uguale all'ordine di caricamento.

Ulteriori indicazioni sull'utilizzo

  • Puoi impostare un limite superiore per il tempo di esecuzione di un job batch prima del giorno in fase di annullamento. Quando crei un nuovo job batch, imposta il parametro metadata.execution_limit_seconds al limite di tempo che preferisci, in secondi. Non esiste un orario predefinito se metadata.execution_limit_seconds non è impostato.

  • Ti consigliamo di non aggiungere più di 1000 operazioni per AddBatchJobOperationsRequest e utilizza sequence_token per caricare le altre operazioni nello stesso job. In base delle operazioni, troppe operazioni in una AddBatchJobOperationsRequest potrebbe causare un errore REQUEST_TOO_LARGE. Tu può gestire questo errore riducendo il numero di operazioni e riprovando AddBatchJobOperationsRequest.

Limitazioni

  • Ogni BatchJob supporta fino a un milione operazioni.

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

  • I lavori 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 INTERNAL_ERROR. Puoi determinare le dimensioni della richiesta prima e intraprendere le azioni appropriate se sono troppo grandi.

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