Best practice e limitazioni
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Tieni in considerazione queste linee guida quando utilizzi BatchJobService
.
Migliorare il throughput
È preferibile un numero ridotto di job più grandi rispetto a molti job più piccoli.
Ordina le operazioni caricate per tipo di operazione. Ad esempio, se il tuo job
contiene operazioni per aggiungere campagne, gruppi di annunci e criteri dei gruppi di annunci,
ordina le operazioni nel caricamento in modo che tutte le operazioni
della campagna vengano eseguite per prime, seguite da tutte le
operazioni del gruppo di annunci e infine da tutte le
operazioni dei criteri dei gruppi di annunci.
All'interno di operazioni dello stesso tipo, può migliorare le prestazioni raggruppandole
per risorsa padre. Ad esempio, se hai una serie di
oggetti AdGroupCriterionOperation
, può essere più efficiente raggruppare
le operazioni per gruppo di annunci, anziché combinare 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, prova a ridurre
la probabilità che i job operino sugli stessi oggetti contemporaneamente, mantenendo
dimensioni dei job elevate. Molti job non completati, con lo stato
RUNNING
,
tentano di modificare lo stesso insieme di oggetti, il che può portare a condizioni di stallo
che causano un forte rallentamento e persino errori del job.
Non inviare più operazioni che modificano lo stesso oggetto nello stesso
job, in quanto il risultato può essere imprevedibile.
Recuperare i risultati in modo ottimale
Non eseguire il polling dello stato del job troppo spesso, altrimenti rischi di raggiungere il limite di frequenza
e ricevere errori.
Non recuperare più di 1000 risultati per pagina. Il server potrebbe restituirne
un numero inferiore a causa del carico o di altri fattori.
L'ordine dei risultati sarà lo stesso dell'ordine di caricamento.
Indicazioni aggiuntive per l'utilizzo
Puoi impostare un limite superiore per la durata di esecuzione di 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 un 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 a eseguire 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 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
un INTERNAL_ERROR
. Puoi determinare le dimensioni della richiesta prima
dell'invio 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);
Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2025-08-27 UTC.
[null,null,["Ultimo aggiornamento 2025-08-27 UTC."],[[["\u003cp\u003eTo improve throughput when using BatchJobService, submit fewer, larger jobs and order operations by type and parent resource to enhance efficiency.\u003c/p\u003e\n"],["\u003cp\u003eWhen running concurrent jobs, minimize the likelihood of them operating on the same objects simultaneously to avoid potential deadlock-like conditions and job failures.\u003c/p\u003e\n"],["\u003cp\u003eFor optimal results retrieval, avoid excessive job status polling and retrieve results in batches of 1,000 or less to prevent rate limit errors and ensure efficient data handling.\u003c/p\u003e\n"],["\u003cp\u003eBatchJobService allows setting an execution time limit and recommends a maximum of 1,000 operations per request to avoid exceeding size limitations and potential errors.\u003c/p\u003e\n"],["\u003cp\u003eEach BatchJob is subject to limitations, including a maximum of one million operations, 100 active or pending jobs per account, a 7-day lifespan for pending jobs, and a request size limit of 10,484,504 bytes.\u003c/p\u003e\n"]]],[],null,["# Best Practices and Limitations\n\nConsider these guidelines when using [`BatchJobService`](/google-ads/api/reference/rpc/v21/BatchJobService).\n\nImprove throughput\n------------------\n\n- Fewer larger jobs is preferred over many smaller jobs.\n\n- Order uploaded operations by operation type. For example, if your job\n contains operations to add campaigns, ad groups, and ad group criteria,\n order the operations in your upload so that all of the [campaign\n operations](/google-ads/api/reference/rpc/v21/CampaignOperation) are first, followed by all of\n the [ad group operations](/google-ads/api/reference/rpc/v21/AdGroupOperation), and finally all\n [ad group criterion operations](/google-ads/api/reference/rpc/v21/AdGroupCriterionOperation).\n\n- Within operations of the same type, it can improve performance to group them\n by parent resource. For example, if you have a series of\n `AdGroupCriterionOperation` objects, it can be more efficient to group\n operations by ad group, rather than intermixing operations that affect ad\n group criteria in different ad groups.\n\nAvoid concurrency issues\n------------------------\n\n- When submitting multiple concurrent jobs for the same account, try to reduce\n the likelihood of jobs operating on the same objects at the same time, while\n maintaining large job sizes. Many unfinished jobs, which have the status of\n [`RUNNING`](/google-ads/api/reference/rpc/v21/BatchJobStatusEnum.BatchJobStatus#running),\n try to mutate the same set of objects, which can lead to deadlock-like\n conditions resulting in severe slow-down and even job failures.\n\n- Don't submit multiple operations that mutate the same object in the same\n job, as the result can be unpredictable.\n\nRetrieve results optimally\n--------------------------\n\n- Don't poll the job status too frequently or you risk hitting rate limit\n errors.\n\n- Don't retrieve more than 1,000 results per page. The server could return\n fewer than that due to load or other factors.\n\n- The results order will be the same as the upload order.\n\nAdditional usage guidance\n-------------------------\n\n- You can set an upper bound for how long a batch job is allowed to run before\n being cancelled. When creating a new batch job, set the\n [`metadata.execution_limit_seconds`](/google-ads/api/reference/rpc/v21/BatchJob.BatchJobMetadata#execution_limit_seconds)\n field to your preferred time limit, in seconds. There is no default time\n limit if `metadata.execution_limit_seconds` is not set.\n\n- It is recommended to add no more than 1,000 operations per\n [`AddBatchJobOperationsRequest`](/google-ads/api/reference/rpc/v21/BatchJobService/AddBatchJobOperations)\n and use the\n [`sequence_token`](/google-ads/api/reference/rpc/v21/AddBatchJobOperationsRequest#sequence_token)\n to upload the rest of the operations to the same job. Depending on the\n content of the operations, too many operations in a single\n `AddBatchJobOperationsRequest` could cause a [`REQUEST_TOO_LARGE`](/google-ads/api/reference/rpc/v21/DatabaseErrorEnum.DatabaseError#request_too_large) error. You\n can handle this error by reducing the number of operations and retrying the\n `AddBatchJobOperationsRequest`.\n\nLimitations\n-----------\n\n- Each [`BatchJob`](/google-ads/api/reference/rpc/v21/BatchJob) supports up to one million\n operations.\n\n- Each account can have up to 100 active or pending jobs at the same time.\n\n- Pending jobs older than 7 days are automatically removed.\n\n- Each [`AddBatchJobOperationsRequest`](/google-ads/api/reference/rpc/v21/BatchJobService/AddBatchJobOperations)\n has a maximum size of 10,484,504 bytes. If you exceed this, you will receive\n an `INTERNAL_ERROR`. You can determine the size of the request before\n submitting and take appropriate action if it is too large.\n\n ### Java\n\n\n static final int MAX_REQUEST_BYTES = 10_484_504;\n\n ... (code to get the request object)\n\n int sizeInBytes = request.getSerializedSize();\n\n ### Python\n\n\n from google.ads.googleads.client import GoogleAdsClient\n\n MAX_REQUEST_BYTES = 10484504\n\n ... (code to get the request object)\n\n size_in_bytes = request._pb.ByteSize()\n\n ### Ruby\n\n\n require 'google/ads/google_ads'\n\n MAX_REQUEST_BYTES = 10484504\n\n ... (code to get the request object)\n\n size_in_bytes = request.to_proto.bytesize\n\n ### PHP\n\n\n use Google\\Ads\\GoogleAds\\V16\\Resources\\Campaign;\n\n const MAX_REQUEST_BYTES = 10484504;\n\n ... (code to get the request object)\n\n $size_in_bytes = $campaign-\u003ebyteSize() . PHP_EOL;\n\n ### .NET\n\n\n using Google.Protobuf;\n const int MAX_REQUEST_BYTES = 10484504;\n\n ... (code to get the request object)\n\n int sizeInBytes = request.ToByteArray().Length;\n\n ### Perl\n\n\n use Devel::Size qw(total_size);\n use constant MAX_REQUEST_BYTES =\u003e 10484504;\n\n ... (code to get the request object)\n\n my $size_in_bytes = total_size($request);"]]