使用 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 天的作业。 
- 自 v22 起,每个 - AddBatchJobOperations请求的变异操作数上限为 10,000。
- 自 v22 起,对于 - ListBatchJobResultsRequest中的- page_size字段:- 如果未设置 page_size或将其设置为 0,则默认值为 1,000。
- 如果 page_size大于 1,000 或小于 0,API 会返回INVALID_PAGE_SIZE错误。
 
- 如果未设置 
- 每个 - 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);