Meilleures pratiques et limites

Tenez compte de ces consignes lorsque vous utilisez BatchJobService.

Améliorer le débit

  • Il est préférable de privilégier moins de tâches volumineuses plutôt que de nombreuses tâches plus petites.

  • Triez les opérations importées par type d'opération. Par exemple, si votre tâche contient des opérations d'ajout de campagnes, de groupes d'annonces et de critères de groupe d'annonces, triez les opérations de votre importation de sorte que toutes les opérations de campagne soient placées en premier, suivies de toutes les opérations de groupe d'annonces, puis de toutes les opérations de critère de groupe d'annonces.

  • Dans les opérations de même type, regrouper les opérations par ressource parente peut améliorer les performances. Par exemple, si vous disposez d'une série d'objets AdGroupCriterionOperation, il peut être plus efficace de regrouper les opérations par groupe d'annonces plutôt que de mélanger les opérations qui affectent les critères de groupe d'annonces dans différents groupes d'annonces.

Éviter les problèmes de simultanéité

  • Lorsque vous envoyez plusieurs tâches simultanées pour le même compte, essayez de réduire la probabilité que les tâches s'exécutent sur les mêmes objets en même temps, tout en conservant de grandes tailles de tâches. De nombreuses tâches inachevées, dont l'état est RUNNING, tentent de modifier le même ensemble d'objets, ce qui peut entraîner des conditions semblables à un interblocage, ce qui entraîne un ralentissement important et même des échecs de tâches.

  • N'envoyez pas plusieurs opérations qui modifient le même objet dans la même tâche, car le résultat peut être imprévisible.

Récupérer les résultats de manière optimale

  • N'interrogez pas l'état de la tâche trop fréquemment, car vous risqueriez de rencontrer des erreurs de limitation du débit.

  • Ne récupérez pas plus de 1 000 résultats par page. Le serveur peut en renvoyer moins en raison de la charge ou d'autres facteurs.

  • L'ordre des résultats sera le même que celui de l'importation.

Conseils d'utilisation supplémentaires

  • Vous pouvez définir une limite supérieure à la durée d'exécution d'un job par lot avant qu'il ne soit annulé. Lorsque vous créez une tâche par lot, définissez le champ metadata.execution_limit_seconds sur la limite de temps de votre choix, en secondes. Aucune limite de temps par défaut n'est définie si metadata.execution_limit_seconds n'est pas défini.

  • Nous vous recommandons de ne pas ajouter plus de 1 000 opérations par AddBatchJobOperationsRequest et d'utiliser sequence_token pour importer le reste des opérations dans la même tâche. En fonction du contenu des opérations, un trop grand nombre d'opérations dans un seul AddBatchJobOperationsRequest peut entraîner une erreur REQUEST_TOO_LARGE. Vous pouvez gérer cette erreur en réduisant le nombre d'opérations et en réessayant l'AddBatchJobOperationsRequest.

Limites

  • Chaque BatchJob peut prendre en charge jusqu'à un million d'opérations.

  • Chaque compte peut comporter jusqu'à 100 tâches actives ou en attente en même temps.

  • Les tâches en attente datant de plus de sept jours sont automatiquement supprimées.

  • Chaque AddBatchJobOperationsRequest a une taille maximale de 10 484 504 octets. Si vous dépassez cette limite, vous recevrez un INTERNAL_ERROR. Vous pouvez déterminer la taille de la requête avant de l'envoyer et prendre les mesures appropriées si elle est trop volumineuse.

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