使用 BatchJobService
时,请考虑以下准则。
提高吞吐量
建议使用较少的大型作业,而不是许多较小的作业。
按操作类型对上传的操作进行排序。例如,如果您的作业包含添加广告系列、广告组和广告组条件的操作,请对上传的操作进行排序,使所有广告系列操作排在前面,然后是所有广告组操作,最后是所有广告组条件操作。
在同一类型的操作中,按父级资源对其进行分组可以提高性能。例如,如果您有一系列
AdGroupCriterionOperation
对象,则按广告组对操作进行分组会更高效,而不是在不同的广告组中混合影响广告组条件的操作。
避免并发问题
为同一账号提交多个并发作业时,请尽量减少作业同时对同一对象进行操作的可能性,同时保持较大的作业大小。许多状态为
RUNNING
的未完成作业会尝试修改同一组对象,这可能会导致类似死锁的条件,进而导致严重的速度下降,甚至导致作业失败。请勿在同一作业中提交会修改同一对象的多个操作,因为结果可能无法预测。
以最佳方式检索结果
请勿过于频繁地轮询作业状态,否则可能会触发速率限制错误。
每个页面检索的结果不得超过 1,000 条。由于负载或其他因素,服务器返回的数量可能会少于此数。
结果的顺序将与上传顺序相同。
其他使用指南
您可以设置批处理作业在取消之前允许运行的最长时间上限。创建新的批处理作业时,请将
metadata.execution_limit_seconds
字段设置为首选时限(以秒为单位)。如果未设置metadata.execution_limit_seconds
,则没有默认时限。建议每个
AddBatchJobOperationsRequest
添加的操作不超过 1,000 个,并使用sequence_token
将其余操作上传到同一作业。单个AddBatchJobOperationsRequest
中的操作过多可能会导致REQUEST_TOO_LARGE
错误,具体取决于操作的内容。您可以通过减少操作次数并重试AddBatchJobOperationsRequest
来处理此错误。
限制
每个
BatchJob
最多支持 100 万次操作。每个账号最多可以同时有 100 个处于有效或待处理状态的作业。
系统会自动移除存在时长已超过 7 天的待处理作业。
每个
AddBatchJobOperationsRequest
的大小上限为 10,484,504 字节。如果超出此限制,您将会收到INTERNAL_ERROR
。您可以在提交前确定请求的大小,如果请求太大,则采取适当的措施。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);