Pertimbangkan panduan ini saat menggunakan BatchJobService.
Meningkatkan throughput
Lebih sedikit tugas yang lebih besar lebih disukai daripada banyak tugas yang lebih kecil.
Urutkan operasi yang diupload berdasarkan jenis operasi (kecuali untuk operasi yang saling bergantung yang harus dikelompokkan secara berurutan dalam sub-batch atomik). Misalnya, jika tugas Anda berisi operasi untuk menambahkan kampanye standar, grup iklan, dan kriteria grup iklan, urutkan operasi dalam upload Anda sehingga semua operasi kampanye berada di urutan pertama, diikuti dengan semua operasi grup iklan, dan terakhir semua operasi kriteria grup iklan.
Dalam operasi dengan jenis yang sama, performa dapat ditingkatkan dengan mengelompokkannya berdasarkan resource induk. Misalnya, jika Anda memiliki serangkaian objek
AdGroupCriterionOperation, akan lebih efisien untuk mengelompokkan operasi berdasarkan grup iklan daripada mencampur operasi yang memengaruhi kriteria grup iklan di berbagai grup iklan.
Atomisitas dalam pemisahan batch
Google Ads API membagi operasi dalam tugas batch yang dikirimkan menjadi sub-batch yang lebih kecil untuk diproses. Meskipun sub-batch standar dijalankan dengan kegagalan parsial diaktifkan, sub-batch untuk operasi tertentu yang saling bergantung diproses secara atomik sebagai satu transaksi:
- Operasi
AdGroupCriterionOperationberturut-turut (create,update, danremove) untuk kriteriaLISTING_GROUP(AdGroupCriterion.listing_group) yang menargetkanAdGroupyang sama (gagal denganCriterionError.LISTING_GROUP_ERROR_IN_ANOTHER_OPERATIONjika ada operasi dalam grup yang gagal). - Operasi
AssetGroupListingGroupFilterOperationberturut-turut (create,update, danremove) yang menargetkanAssetGroupyang sama (gagal denganBatchJobError.ASSET_GROUP_LISTING_GROUP_FILTER_TRANSACTION_FAILUREjika ada operasi dalam grup yang gagal). AssetGroupOperation(create) yang langsung diikuti oleh hingga 999 operasiAssetGroupAssetOperation(create) yang menargetkanAssetGroupyang sama (gagal denganBatchJobError.ASSET_GROUP_AND_ASSET_GROUP_ASSET_TRANSACTION_FAILUREjika ada operasi dalam grup yang gagal). SetiapAssetGroupOperation(updateatauremove) dijalankan dalam sub-batch operasi tunggal mandirinya sendiri.CampaignOperation(create) Performa Maksimal dengan Pedoman Merek diaktifkan (brand_guidelines_enabledditetapkan ketrueatau tidak ditetapkan, karena setelan defaultnya adalahtruekecuali jika ditetapkan secara eksplisit kefalseatau membuat kampanye Performa Maksimal untuk sasaran perjalanan) yang langsung diikuti oleh hingga 999 operasiCampaignAssetOperation(create) yang menargetkanCampaignyang sama (gagal denganBatchJobError.CAMPAIGN_AND_CAMPAIGN_ASSET_TRANSACTION_FAILUREjika ada operasi dalam grup yang gagal). Kampanye Performa Maksimal Retail (dengan feed Merchant Center) dapat dibuat tanpa menautkan referensiCampaignAssetmerek dalam sub-batch atom yang sama.
Untuk sub-batch pembuatan Campaign AssetGroup dan Performa Maksimal (total hingga 1.000 operasi per sub-batch; setiap operasi create turunan di luar 999 akan dialihkan ke sub-batch non-atomik berikutnya):
- Operasi
createinduk (resource_namediAssetGroupatauCampaign) dan operasicreateturunan berturut-turut (asset_groupdiAssetGroupAssetataucampaigndiCampaignAsset) harus menentukan ID sementara negatif yang sama. - Tempatkan operasi
AssetOperation(create) prasyarat untuk resourceAssetbaru sebelum operasiAssetGroupOperationatauCampaignOperation(create) induk, jangan pernah di antara operasicreateindukcreatedan link turunannya (yang akan langsung menutup sub-batch atomik dan memisahkan pembuatan resource induk dari aset tertautnya).
Jika sub-batch atomik gagal, BatchJobResult.status operasi yang bermasalah akan berisi error validasi yang mendasarinya, sedangkan operasi yang tersisa dalam sub-batch tersebut akan di-roll back dengan error transaksi yang sesuai untuk sub-batch tersebut. Periksa entri BatchJobResult yang berdekatan yang memiliki ID AdGroup, AssetGroup, atau Campaign yang sama untuk mengidentifikasi error penyebab utama.
Jika operasi terkait di salah satu grup ini tidak ditambahkan secara berurutan, Google Ads API akan membaginya ke dalam sub-batch terpisah, sehingga menyebabkan modifikasi gagal memenuhi persyaratan aset minimum atau membuat hierarki kelompok listing tidak lengkap. Lihat Menggunakan filter kelompok listing dalam tugas batch dan Pemrosesan batch Performa Maksimal untuk mengetahui detailnya.
Pengelompokan logis
Saat mengubah hierarki penargetan produk
(AssetGroupListingGroupFilterOperation di kampanye Performa
Maksimal atau AdGroupCriterionOperation di
kampanye Shopping) atau membuat AssetGroup atau
Campaign Performa Maksimal baru, kelompokkan semua operasi yang menargetkan
resource induk yang sama (AssetGroup, AdGroup, atau
Campaign) secara berurutan. Hal ini mengurangi pertentangan kunci backend dan
menjaga pohon yang saling bergantung tetap bersama.
Konsistensi data
Karena hierarki filter kelompok listingan dan persyaratan aset Performa Maksimal divalidasi di akhir setiap transaksi sub-batch atomik, hindari memisahkan pembaruan ke resource induk yang sama di seluruh rentang yang tidak berkelanjutan dalam tugas atau di seluruh tugas serentak.
Menghindari masalah konkurensi
Saat mengirimkan beberapa tugas serentak untuk akun yang sama, kurangi kemungkinan tugas beroperasi pada objek yang sama secara bersamaan sambil mempertahankan ukuran tugas yang besar. Banyak tugas yang belum selesai dengan status
RUNNINGyang mencoba mengubah kumpulan objek yang sama dapat menyebabkan kondisi seperti deadlock, sehingga mengakibatkan perlambatan yang 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.
Biarkan
page_sizetidak ditetapkan (atau tetapkan ke maksimum1000) saat memanggilListBatchJobResultsuntuk meminimalkan round trip penomoran halaman, dan hanya tetapkanresponse_content_typekeMUTABLE_RESOURCEjika aplikasi Anda memeriksa kolom resource yang ditampilkan di luarresource_name.Urutan hasil sama dengan urutan upload.
Panduan penggunaan tambahan
Anda dapat menetapkan batas atas durasi tugas batch yang diizinkan untuk berjalan sebelum dibatalkan. Saat membuat tugas batch baru, tetapkan kolom
metadata.execution_limit_secondske batas waktu yang Anda inginkan, dalam detik. Tidak ada batas waktu default jikametadata.execution_limit_secondstidak ditetapkan.Meskipun batas protokol adalah 10.000 operasi per permintaan, sebaiknya tambahkan tidak lebih dari 1.000 operasi per
AddBatchJobOperationsRequestdan gunakansequence_tokenuntuk mengupload operasi lainnya ke tugas yang sama. Bergantung pada ukuran operasi, mengirim terlalu banyak operasi dalam satuAddBatchJobOperationsRequestdapat menyebabkan errorBatchJobError.REQUEST_TOO_LARGE. Anda dapat menangani error ini dengan mengurangi jumlah operasi dan mencoba ulangAddBatchJobOperationsRequest.
Batasan
Setiap
BatchJobmendukung hingga satu juta operasi. Jika batas ini terlampaui saat memanggilAddBatchJobOperations, errorResourceCountLimitExceededError.RESOURCE_LIMITakan muncul (denganResourceLimitType.BATCH_JOB_OPERATIONS_PER_JOBdiErrorDetails.resource_count_details).Setiap akun dapat memiliki hingga 100 tugas aktif atau tertunda secara bersamaan. Jika batas ini terlampaui saat membuat tugas batch dengan
MutateBatchJob, errorResourceCountLimitExceededError.RESOURCE_LIMITakan muncul (denganResourceLimitType.BATCH_JOBS_PER_CUSTOMERdiErrorDetails.resource_count_details).Tugas tertunda yang sudah lebih dari 7 hari akan otomatis dihapus.
Setiap
AddBatchJobOperationsRequestmemiliki batas ketat 10.000 operasi mutasi per permintaan. Melebihi 10.000 operasi dalam satu permintaan akan menampilkan errorBatchJobError.REQUEST_TOO_LARGE.Untuk kolom
page_sizediListBatchJobResultsRequest:- Jika
page_sizetidak ditetapkan atau bernilai0, nilai defaultnya adalah maksimum1000. - Jika
page_sizemelebihi1000, atau kurang dari0, API akan menampilkan errorBatchJobError.INVALID_PAGE_SIZE.
- Jika
Setiap
AddBatchJobOperationsRequestmemiliki ukuran maksimum 41.937.920 byte. Jika melebihi batas ini, Anda akan menerima errorBatchJobError.REQUEST_TOO_LARGE(atauINTERNAL_ERRORjika ditolak di lapisan transpor). Anda dapat menentukan ukuran permintaan yang diserialisasi sebelum mengirimkannya dan mengambil tindakan yang sesuai jika ukurannya terlalu besar:Java
static final int MAX_REQUEST_BYTES = 41_937_920; // ... (code to get the AddBatchJobOperationsRequest object) int sizeInBytes = request.getSerializedSize();C#
const int MAX_REQUEST_BYTES = 41_937_920; // ... (code to get the AddBatchJobOperationsRequest object) int sizeInBytes = request.CalculateSize();PHP
const MAX_REQUEST_BYTES = 41937920; // ... (code to get the AddBatchJobOperationsRequest object) $size_in_bytes = $request->byteSize();Python
MAX_REQUEST_BYTES = 41_937_920 # ... (code to get the AddBatchJobOperationsRequest object) size_in_bytes = type(request).pb(request).ByteSize()Ruby
MAX_REQUEST_BYTES = 41_937_920 # ... (code to get the AddBatchJobOperationsRequest object) size_in_bytes = request.to_proto.bytesizePerl
use JSON::XS; use constant MAX_REQUEST_BYTES => 41937920; # ... (code to get the AddBatchJobOperationsRequest object) # The Perl client library uses REST/JSON; UTF-8 JSON byte length provides a # conservative upper-bound estimate of the serialized request size. my $json_encoder = JSON::XS->new->utf8->convert_blessed; my $size_in_bytes = length($json_encoder->encode($request));
Ukuran operasi mutasi tunggal
Meskipun keseluruhan permintaan dapat mencapai 41.937.920 byte, ukuran serial dari satu MutateOperation dalam batch dibatasi hingga 10.484.504 byte (10 MiB dikurangi 1.256 byte). Jika batas ini terlampaui, error BatchJobError.REQUEST_TOO_LARGE akan muncul. Perhatikan bahwa meskipun
dokumentasi referensi untuk BatchJobError.REQUEST_TOO_LARGE mengutip
nilai minimum 10.484.504 byte, AddBatchJobOperations menampilkan kode error yang sama ini
saat salah satu dari tiga nilai minimum permintaan (total byte permintaan 41.937.920,
byte operasi tunggal 10.484.504, atau 10.000 operasi per panggilan) terlampaui,
dengan kolom message error yang menentukan batas yang dilanggar.