Ten en cuenta estos lineamientos cuando uses BatchJobService
.
Mejora la capacidad de procesamiento
Se prefiere menos trabajos más grandes en lugar de 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 de grupos de anuncios, ordena las operaciones en tu carga de modo que todas las operaciones de campaña aparezcan primero, seguidas de todas las operaciones de grupo de anuncios y, por último, todas las operaciones de criterios de grupo de anuncios.
Dentro de las operaciones del mismo tipo, puede mejorar el rendimiento agruparlas por recurso superior. 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 varias tareas simultáneas para la misma cuenta, intenta reducir la probabilidad de que las tareas operen en los mismos objetos al mismo tiempo y, al mismo tiempo, mantén tamaños de tareas 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 interbloqueo, lo que genera una ralentización grave y, en algunos casos, fallas en el trabajo.No envíes varias operaciones que muten el mismo objeto en el mismo trabajo, ya que el resultado puede ser impredecible.
Cómo recuperar resultados de forma óptima
No consultes el estado de la tarea con demasiada frecuencia, o podrías generar errores de límite de frecuencia.
No recuperes más de 1,000 resultados por página. El servidor podría mostrar menos debido a la carga o a otros factores.
El orden de los resultados será el mismo que el de carga.
Orientación adicional sobre el uso
Puedes establecer un límite superior para el tiempo que se puede ejecutar 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 establecemetadata.execution_limit_seconds
.Se recomienda agregar no más de 1,000 operaciones por
AddBatchJobOperationsRequest
y usar lasequence_token
para subir el resto de las operaciones al mismo trabajo. Según el contenido de las operaciones, demasiadas operaciones en una solaAddBatchJobOperationsRequest
podrían causar un errorREQUEST_TOO_LARGE
. Para controlar este error, reduce la cantidad de operaciones y vuelve a intentar elAddBatchJobOperationsRequest
.
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 unINTERNAL_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);