Prácticas recomendadas y limitaciones
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Ten en cuenta estos lineamientos cuando uses BatchJobService
.
Mejora la capacidad de procesamiento
Se prefieren menos trabajos más grandes que muchos trabajos más pequeños.
Ordena las operaciones subidas por tipo de operación. Por ejemplo, si tu trabajo contiene operaciones para agregar campañas, grupos de anuncios y criterios del grupo de anuncios, ordena las operaciones en tu carga de modo que todas las operaciones de campaña se realicen primero, seguidas de todas las operaciones de grupo de anuncios y, por último, todas las operaciones de criterios del grupo de anuncios.
En las operaciones del mismo tipo, puede mejorar el rendimiento agruparlas por recurso principal. Por ejemplo, si tienes una serie de objetos AdGroupCriterionOperation
, puede ser más eficiente agrupar las operaciones por grupo de anuncios, en lugar de mezclar operaciones que afectan los criterios de grupos de anuncios en diferentes grupos de anuncios.
Evita problemas de simultaneidad
Cuando envíes varios trabajos simultáneos para la misma cuenta, intenta reducir la probabilidad de que los trabajos operen en los mismos objetos al mismo tiempo, sin dejar de mantener tamaños de trabajo grandes. Muchos trabajos sin terminar, que tienen el estado RUNNING
, intentan mutar el mismo conjunto de objetos, lo que puede generar condiciones similares a un bloqueo que provocan una ralentización grave e incluso fallas en los trabajos.
No envíes varias operaciones que modifiquen el mismo objeto en el mismo trabajo, ya que el resultado puede ser impredecible.
Recupera resultados de forma óptima
No sondee el estado del trabajo con demasiada frecuencia, ya que corre el riesgo de alcanzar errores de límite de frecuencia.
No recuperes más de 1,000 resultados por página. El servidor podría devolver menos de esa cantidad debido a la carga o a otros factores.
El orden de los resultados será el mismo que el orden de carga.
Orientación adicional sobre el uso
Puedes establecer un límite superior para el tiempo que se permite que se ejecute un trabajo por lotes antes de que se cancele. Cuando crees un trabajo por lotes nuevo, configura el campo metadata.execution_limit_seconds
en el límite de tiempo que prefieras, en segundos. No hay un límite de tiempo predeterminado si no se establece metadata.execution_limit_seconds
.
Se recomienda agregar no más de 1,000 operaciones por AddBatchJobOperationsRequest
y usar sequence_token
para subir el resto de las operaciones al mismo trabajo. Según el contenido de las operaciones, demasiadas operaciones en un solo AddBatchJobOperationsRequest
podrían causar un error REQUEST_TOO_LARGE
. Para controlar este error, reduce la cantidad de operaciones y vuelve a intentar la solicitud de AddBatchJobOperationsRequest
.
Limitaciones
Cada BatchJob
admite hasta un millón de operaciones.
Cada cuenta puede tener hasta 100 trabajos activos o pendientes al mismo tiempo.
Los trabajos pendientes que tengan más de 7 días se quitarán automáticamente.
Cada AddBatchJobOperationsRequest
tiene un tamaño máximo de 10,484,504 bytes. Si lo superas, recibirás un INTERNAL_ERROR
. Puedes determinar el tamaño de la solicitud antes de enviarla y tomar las medidas adecuadas si es demasiado 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()
Rita
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 que se indique lo contrario, el contenido de esta página está sujeto a la licencia Atribución 4.0 de Creative Commons, y los ejemplos de código están sujetos a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-08-27 (UTC)
[null,null,["Última actualización: 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);"]]