Praktik Terbaik dan Batasan

Pertimbangkan pedoman ini saat menggunakan BatchJobService

Meningkatkan throughput

  • Lebih sedikit pekerjaan yang lebih besar lebih disukai daripada banyak pekerjaan kecil.

  • Urutkan operasi yang diupload menurut jenis operasi. Misalnya, jika pekerjaan Anda berisi operasi untuk menambahkan kampanye, grup iklan, dan kriteria grup iklan, mengurutkan operasi dalam upload Anda sehingga semua halaman operasi pertama, diikuti oleh semua operasi grup iklan, dan terakhir semua operasi kriteria grup iklan.

  • Dalam operasi yang jenisnya sama, tindakan ini dapat meningkatkan performa dengan mengelompokkannya oleh resource induk. Misalnya, jika Anda memiliki serangkaian AdGroupCriterionOperation objek, akan lebih efisien untuk mengelompokkan operasi menurut grup iklan, dan bukan mencampurkan operasi yang memengaruhi iklan mengelompokkan kriteria dalam grup iklan yang berbeda.

Menghindari masalah serentak

  • Saat mengirimkan beberapa tugas serentak untuk akun yang sama, coba kurangi kemungkinan pekerjaan beroperasi pada objek yang sama pada saat yang sama, sementara dan mempertahankan ukuran tugas yang besar. Banyak pekerjaan yang belum selesai (dengan status RUNNING) yang mencoba memutasikan kumpulan objek yang sama dapat menyebabkan kondisi seperti deadlock yang mengakibatkan perlambatan yang parah dan bahkan kegagalan tugas.

  • Jangan mengirimkan beberapa operasi yang memutasikan objek yang sama dalam pekerjaan, karena hasilnya tidak dapat diprediksi.

Mengambil hasil secara optimal

  • Jangan melakukan polling tentang status pekerjaan terlalu sering atau Anda berisiko mencapai batas kapasitas yang sama.

  • Jangan mengambil lebih dari 1.000 hasil per halaman. Server dapat menampilkan lebih sedikit dari itu karena beban atau faktor lain.

  • Urutan hasil akan sama dengan urutan upload.

Panduan penggunaan tambahan

  • Anda dapat menetapkan batas atas durasi tugas batch boleh dijalankan sebelum dibatalkan. Saat membuat tugas batch baru, atur metadata.execution_limit_seconds ke batas waktu yang diinginkan, dalam detik. Tidak ada waktu default batas jika metadata.execution_limit_seconds tidak ditetapkan.

  • Sebaiknya tambahkan tidak lebih dari 1.000 operasi per AddBatchJobOperationsRequest serta gunakan sequence_token untuk mengunggah operasi lainnya ke tugas yang sama. Bergantung pada operasi terlalu banyak, terlalu banyak operasi dalam satu AddBatchJobOperationsRequest dapat menyebabkan error REQUEST_TOO_LARGE. Anda dapat menangani kesalahan ini dengan mengurangi jumlah operasi dan mencoba kembali AddBatchJobOperationsRequest.

Batasan

  • Setiap BatchJob mendukung maksimal satu juta operasional bisnis.

  • Setiap akun dapat memiliki hingga 100 tugas yang aktif atau tertunda secara bersamaan.

  • Tugas yang tertunda lebih dari 7 hari akan otomatis dihapus.

  • Setiap AddBatchJobOperationsRequest memiliki ukuran maksimum 10.484.504 byte. Jika melebihi batas ini, Anda akan menerima INTERNAL_ERROR. Anda dapat menentukan ukuran permintaan sebelum mengirimkannya dan mengambil tindakan yang sesuai jika terlalu besar.

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