권장사항 및 제한사항

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이 발생합니다. 제출 전에 요청의 크기를 확인하고 너무 큰 경우 적절한 조치를 취할 수 있습니다.

    자바

    
    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);