Meilleures pratiques et limites

Tenez compte de ces consignes lorsque vous utilisez BatchJobService.

Améliorer le débit

  • Il est préférable d'avoir moins de tâches plus volumineuses 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 permettant d'ajouter des campagnes, des groupes d'annonces et des critères de groupe d'annonces, triez-les dans votre importation de sorte que toutes les opérations de campagne soient 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 du même type, il peut être plus efficace de les regrouper par ressource parente. 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 les mélanger, car elles affectent les critères de groupe d'annonces dans différents groupes d'annonces.

Atomicité dans la division par lot

L'API Google Ads peut diviser les opérations d'un job par lot envoyé en sous-lots plus petits pour le traitement. Si vous ne regroupez pas les opérations associées, telles que les modifications de groupe de fiches dans un AssetGroup et un AdGroup, de manière consécutive dans un job par lot, l'API Google Ads peut les diviser en différents sous-lots. Cette séparation peut entraîner l'échec de la modification ou laisser le compte dans un état incohérent.

Regroupement logique

AssetGroupListingGroupFilterOperation gère les groupes de fiches dans un AssetGroup, ce qui est courant dans les campagnes Performance Max. AdGroupCriterionOperation gère les groupes de fiches dans un AdGroup, ce qui est courant dans les campagnes Shopping standards. Les deux sont utilisés pour définir le ciblage des produits. Si vous apportez des modifications qui affectent la hiérarchie de ciblage des produits dans les deux contextes, regroupez ces opérations de manière consécutive dans votre tâche par lot pour vous assurer qu'elles sont appliquées ensemble.

Cohérence des données

Pour maintenir la cohérence des données et éviter les mises à jour partielles, ajoutez les opérations de groupe de fiches associées de manière consécutive à votre job par lot. Cet ordre permet de les regrouper en sous-lots atomiques par la logique de division par lot de l'API, ce qui évite que votre compte ne soit laissé dans un état incohérent.

É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 fonctionnent sur les mêmes objets en même temps, tout en conservant des tailles de tâches importantes. 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 d'interblocage entraînant un ralentissement important, voire 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, sinon vous risquez d'atteindre les erreurs de limite de 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 l'ordre d'importation.

Conseils d'utilisation supplémentaires

  • Vous pouvez définir une limite supérieure pour la durée d'exécution d'un job par lot avant son annulation. Lorsque vous créez un job par lot, définissez le metadata.execution_limit_seconds champ sur la limite de temps de votre choix, en secondes. Si metadata.execution_limit_seconds n'est pas défini, il n'y a pas de limite de temps par défaut.

  • Il est recommandé d'ajouter au maximum 1 000 opérations par AddBatchJobOperationsRequest et d'utiliser le 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 une seule 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 la AddBatchJobOperationsRequest.

Limites

  • Chaque BatchJob accepte jusqu'à un million d'opérations.

  • Chaque compte peut avoir 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.

  • À partir de la version 22, chaque requête AddBatchJobOperations est limitée à 10 000 opérations de mutation par requête.

  • À partir de la version 22, pour le page_size champ dans ListBatchJobResultsRequest :

    • Si page_size n'est pas défini ou est égal à 0, la valeur par défaut est le maximum de 1 000.
    • Si page_size dépasse 1 000 ou est inférieur à 0, l'API renvoie une INVALID_PAGE_SIZE erreur.
  • À partir de la version 23, chaque AddBatchJobOperationsRequest a une taille maximale de 41 937 920 octets. Si vous dépassez cette limite, vous recevrez une 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 = 41_937_920;
    
    ... (code to get the request object)
    
    int sizeInBytes = request.getSerializedSize();
    

    Python

    
    from google.ads.googleads.client import GoogleAdsClient
    
    MAX_REQUEST_BYTES = 41937920
    
    ... (code to get the request object)
    
    size_in_bytes = request._pb.ByteSize()
    

    Ruby

    
    require 'google/ads/google_ads'
    
    MAX_REQUEST_BYTES = 41937920
    
    ... (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 = 41937920;
    
    ... (code to get the request object)
    
    $size_in_bytes = $campaign->byteSize() . PHP_EOL;
    

    .NET

    
    using Google.Protobuf;
    const int MAX_REQUEST_BYTES = 41937920;
    
    ... (code to get the request object)
    
    int sizeInBytes = request.ToByteArray().Length;
    

    Perl

    
    use Devel::Size qw(total_size);
    use constant MAX_REQUEST_BYTES => 41937920;
    
    ... (code to get the request object)
    
    my $size_in_bytes = total_size($request);
    

Taille d'une seule opération de mutation

Bien que la requête globale puisse être plus volumineuse, la taille d'une seule opération de mutation dans le lot est limitée à 10 484 488 octets (environ 10,48 Mo).