Pertimbangkan panduan berikut saat menggunakan BatchJobService
.
Meningkatkan throughput
Lebih sedikit tugas yang lebih besar lebih disukai daripada banyak tugas yang lebih kecil.
Mengurutkan operasi yang diupload menurut jenis operasi. Misalnya, jika tugas Anda berisi operasi untuk menambahkan kampanye, grup iklan, dan kriteria grup iklan, urutkan operasi dalam upload Anda sehingga semua operasi kampanye dilakukan terlebih dahulu, diikuti dengan semua operasi grup iklan, dan terakhir semua operasi kriteria grup iklan.
Dalam operasi dengan jenis yang sama, pengelompokan menurut resource induk dapat meningkatkan performa. Misalnya, jika Anda memiliki serangkaian objek
AdGroupCriterionOperation
, akan lebih efisien untuk mengelompokkan operasi menurut grup iklan, daripada mencampuradukkan operasi yang memengaruhi kriteria grup iklan di grup iklan yang berbeda.
Menghindari masalah konkurensi
Saat mengirimkan beberapa tugas serentak untuk akun yang sama, coba kurangi kemungkinan tugas beroperasi pada objek yang sama pada saat yang sama, sambil mempertahankan ukuran tugas yang besar. Banyak tugas yang belum selesai, yang memiliki status
RUNNING
, mencoba memutasi kumpulan objek yang sama, yang dapat menyebabkan kondisi seperti kebuntuan yang mengakibatkan perlambatan parah dan bahkan kegagalan tugas.Jangan mengirimkan beberapa operasi yang mengubah objek yang sama dalam tugas yang sama, karena hasilnya tidak dapat diprediksi.
Mengambil hasil secara optimal
Jangan terlalu sering melakukan polling status tugas atau Anda berisiko mengalami error pembatasan kapasitas.
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 diizinkan berjalan sebelum dibatalkan. Saat membuat tugas batch baru, tetapkan kolom
metadata.execution_limit_seconds
ke batas waktu pilihan Anda, dalam detik. Tidak ada batas waktu default jikametadata.execution_limit_seconds
tidak ditetapkan.Sebaiknya tambahkan tidak lebih dari 1.000 operasi per
AddBatchJobOperationsRequest
dan gunakansequence_token
untuk mengupload operasi lainnya ke tugas yang sama. Bergantung pada konten operasi, terlalu banyak operasi dalam satuAddBatchJobOperationsRequest
dapat menyebabkan errorREQUEST_TOO_LARGE
. Anda dapat mengatasi error ini dengan mengurangi jumlah operasi dan mencoba ulangAddBatchJobOperationsRequest
.
Batasan
Setiap
BatchJob
mendukung hingga satu juta operasi.Setiap akun dapat memiliki hingga 100 tugas aktif atau tertunda secara bersamaan.
Tugas tertunda yang sudah lebih dari 7 hari akan otomatis dihapus.
Setiap
AddBatchJobOperationsRequest
memiliki ukuran maksimum 10.484.504 byte. Jika melebihi batas ini, Anda akan menerimaINTERNAL_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);