BatchJobService özelliğini kullanırken aşağıdaki yönergeleri göz önünde bulundurun.
İşleme hızını iyileştirme
Çok sayıda küçük iş yerine daha az sayıda büyük iş tercih edilir.
Yüklenen işlemleri işlem türüne göre sıralayın (atomik alt gruplar halinde art arda gruplandırılması gereken, birbirine bağımlı işlemler hariç). Örneğin, işinizde standart kampanyalar, reklam grupları ve reklam grubu ölçütleri ekleme işlemleri varsa yüklemenizdeki işlemleri, önce tüm kampanya işlemleri, ardından tüm reklam grubu işlemleri ve son olarak tüm reklam grubu ölçütü işlemleri olacak şekilde sıralayın.
Aynı türdeki işlemlerin performansını artırmak için bunları üst kaynağa göre gruplandırabilirsiniz. Örneğin, bir dizi
AdGroupCriterionOperationnesneniz varsa işlemleri farklı reklam gruplarındaki reklam grubu ölçütlerini etkileyen işlemlerle karıştırmak yerine reklam grubuna göre gruplandırmak daha verimlidir.
Toplu bölmede atomiklik
Google Ads API, gönderilen toplu işlerdeki işlemleri işlenmek üzere daha küçük alt toplu işlere böler. Standart alt gruplar kısmi hata etkinleştirilmiş şekilde yürütülürken belirli bağımlı işlemler için alt gruplar tek bir işlem olarak atomik olarak işlenir:
- Aynı
AdGroup'ı hedefleyenLISTING_GROUPölçütleri (AdGroupCriterion.listing_group) için sıralıAdGroupCriterionOperationişlemleri (create,updateveremove) (Gruptaki herhangi bir işlem başarısız olursaCriterionError.LISTING_GROUP_ERROR_IN_ANOTHER_OPERATIONile başarısız olur). - Aynı
AssetGroup'ı hedefleyen sıralıAssetGroupListingGroupFilterOperationişlemler (create,updateveremove) (Gruptaki işlemlerden herhangi biri başarısız olursaBatchJobError.ASSET_GROUP_LISTING_GROUP_FILTER_TRANSACTION_FAILUREile başarısız olur). - Aynı
AssetGroup'ı hedefleyen 999AssetGroupAssetOperation(create) işlemiyle hemen takip edilen birAssetGroupOperation(create) (Gruptaki herhangi bir işlem başarısız olursaBatchJobError.ASSET_GROUP_AND_ASSET_GROUP_ASSET_TRANSACTION_FAILUREile başarısız olur). HerAssetGroupOperation(updateveyaremove) kendi bağımsız tek işlemli alt toplu işleminde yürütülür. - Markalama kurallarının etkinleştirildiği (
brand_guidelines_enabled,trueolarak ayarlanır veya açıkçafalseolarak ayarlanmadığı ya da seyahat hedefleri için Maksimum Performans kampanyası oluşturulmadığı sürece varsayılan olaraktrueayarlandığından ayarlanmamış olarak bırakılır) bir Maksimum PerformansCampaignOperation(create) işlemi ve hemen ardından aynıCampaignhedefleyen 999'a kadarCampaignAssetOperation(create) işlemi (gruptaki herhangi bir işlem başarısız olursaBatchJobError.CAMPAIGN_AND_CAMPAIGN_ASSET_TRANSACTION_FAILUREile başarısız olur). Perakende Maksimum Performans kampanyaları (Merchant Center feed'i ile) aynı atomik alt toplu işlemde markaCampaignAssetkaynakları bağlanmadan oluşturulabilir.
Hem AssetGroup hem de Maksimum Performans
Campaign oluşturma alt grupları için (alt grup başına toplam 1.000 işlem;
999'u aşan tüm alt create işlemleri bir sonraki atomik olmayan alt gruba taşar):
- Üst
createişlemi (resource_nameonAssetGroupveyaCampaign) ve ardışık altcreateişlemleri (asset_grouponAssetGroupAssetveyacampaignonCampaignAsset) aynı negatif geçici ID'yi belirtmelidir. - Yeni
Assetkaynakları için ön koşul olanAssetOperation(create) işlemlerini üstAssetGroupOperationveyaCampaignOperation(create) işlemlerinden önce yerleştirin. Bu işlemler, üstcreateve alt bağlantıcreateişlemleri arasına yerleştirilmemelidir (bu durumda atomik alt toplu işlem hemen kapatılır ve üst kaynak oluşturma işlemi, bağlı öğelerinden ayrılır).
Atomik bir alt toplu işlem başarısız olduğunda, hataya neden olan işlemin BatchJobResult.status, temel doğrulama hatasını içerir. Bu alt toplu işlemdeki kalan işlemler ise alt toplu işlem için karşılık gelen işlem hatasıyla geri alınır. Temel neden hatasını belirlemek için aynı BatchJobResult, AdGroup, AssetGroup veya Campaign kimliğini paylaşan bitişik girişleri inceleyin.
Bu gruplardaki ilgili işlemler art arda eklenmezse Google Ads API, bunları ayrı alt toplu işlere böler. Bu durum, değişikliğin minimum öğe şartlarını karşılamamasına veya listeleme grubu ağaçlarının eksik kalmasına neden olur. Ayrıntılar için Toplu işlerde listeleme grubu filtrelerini kullanma ve Maksimum Performans'ta toplu işleme başlıklı makaleleri inceleyin.
Mantıksal gruplandırma
Bir ürün hedefleme hiyerarşisini değiştirirken (Maksimum Performans kampanyalarında AssetGroupListingGroupFilterOperation veya Alışveriş kampanyalarında AdGroupCriterionOperation) ya da yeni bir AssetGroup veya Maksimum Performans Campaign oluştururken aynı üst kaynağı (AssetGroup, AdGroup veya Campaign) hedefleyen tüm işlemleri art arda gruplandırın. Bu, arka uçta kilit çekişmesini azaltır ve birbirine bağımlı ağaçları bir arada tutar.
Veri tutarlılığı
Listeleme grubu filtre ağaçları ve Maksimum Performans öğe koşulları her atomik alt toplu işlem işleminin sonunda doğrulandığından, aynı üst kaynağa yönelik güncellemeleri bir işteki süreksiz aralıklar veya eşzamanlı işler arasında bölmekten kaçının.
Eşzamanlılık sorunlarını önleme
Aynı hesap için eşzamanlı olarak birden fazla iş gönderirken büyük iş boyutlarını koruyarak işlerin aynı anda aynı nesneler üzerinde çalışması olasılığını azaltın. Aynı nesne grubunu değiştirmeye çalışan,
RUNNINGdurumundaki birçok tamamlanmamış iş, kilitlenmeye benzer koşullara yol açabilir. Bu durum, ciddi yavaşlamalara ve hatta iş hatalarına neden olur.Aynı iş içinde aynı nesneyi değiştiren birden fazla işlem göndermeyin. Aksi takdirde sonuç tahmin edilemez olabilir.
Sonuçları optimum şekilde alma
İş durumunu çok sık yoklamayın. Aksi takdirde, hız sınırı hatalarıyla karşılaşabilirsiniz.
Sayfalandırma gidiş dönüşlerini en aza indirmek için
ListBatchJobResultsçağrılırkenpage_sizeayarlanmamış olarak bırakın (veya1000maksimum değerine ayarlayın).response_content_typedeğerini yalnızca uygulamanız döndürülen kaynak alanlarınıresource_namedışında inceliyorsaMUTABLE_RESOURCEolarak ayarlayın.Sonuçların sırası, yükleme sırasıyla aynıdır.
Ek kullanım bilgileri
Bir toplu işin iptal edilmeden önce çalışmasına izin verilecek süre için üst sınır belirleyebilirsiniz. Yeni bir toplu iş oluştururken
metadata.execution_limit_secondsalanını tercih ettiğiniz zaman sınırına (saniye cinsinden) ayarlayın.metadata.execution_limit_secondsayarlanmamışsa varsayılan süre sınırı yoktur.Protokol sınırı istek başına 10.000 işlem olsa da
AddBatchJobOperationsRequestbaşına en fazla 1.000 işlem eklemenizi ve işlemlerin geri kalanını aynı işe yüklemek içinsequence_tokenkullanmanızı öneririz. İşlemlerin boyutuna bağlı olarak, tek birAddBatchJobOperationsRequestiçinde çok fazla işlem göndermekBatchJobError.REQUEST_TOO_LARGEhatasına neden olabilir. İşlem sayısını azaltıpAddBatchJobOperationsRequestişlemini tekrar deneyerek bu hatayı giderebilirsiniz.
Sınırlamalar
Her
BatchJob, bir milyona kadar işlemi destekler.AddBatchJobOperationsçağrılırken bu sınırın aşılmasıResourceCountLimitExceededError.RESOURCE_LIMIThatası döndürür (ErrorDetails.resource_count_detailsiçindeResourceLimitType.BATCH_JOB_OPERATIONS_PER_JOBile).Her hesapta aynı anda en fazla 100 etkin veya bekleyen iş olabilir.
MutateBatchJobile toplu iş oluştururken bu sınırın aşılmasıResourceCountLimitExceededError.RESOURCE_LIMIThatası döndürür (ErrorDetails.resource_count_detailsiçindeResourceLimitType.BATCH_JOBS_PER_CUSTOMERile).7 günden eski bekleyen işler otomatik olarak kaldırılır.
Her
AddBatchJobOperationsRequestiçin istek başına 10.000 değiştirme işlemi sınırı vardır. Tek bir istekte 10.000'den fazla işlem yapılmasıBatchJobError.REQUEST_TOO_LARGEhatası döndürür.page_sizealanındaListBatchJobResultsRequestiçin:page_sizeayarlanmamışsa veya0ise varsayılan olarak1000değerinin maksimumu kullanılır.page_size,1000değerini aşarsa veya0değerinden küçükse API,BatchJobError.INVALID_PAGE_SIZEhatası döndürür.
Her
AddBatchJobOperationsRequest, maksimum 41.937.920 bayt boyutuna sahip olabilir. Bu sınırı aşarsanızBatchJobError.REQUEST_TOO_LARGEhatası (veya taşıma katmanında reddedilirseINTERNAL_ERRORhatası) alırsınız. İsteği göndermeden önce serileştirilmiş boyutunu belirleyebilir ve çok büyükse uygun işlemi yapabilirsiniz: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));
Tek değiştirme işlemi boyutu
Genel istek 41.937.920 bayta kadar olabilir ancak toplu işlemdeki tek bir MutateOperation öğesinin serileştirilmiş boyutu 10.484.504 bayt (10 MiB eksi 1.256 bayt) ile sınırlıdır. Bu sınırın aşılması BatchJobError.REQUEST_TOO_LARGE hatası döndürür. BatchJobError.REQUEST_TOO_LARGE ile ilgili referans belgelerinde 10.484.504 baytlık eşiğin belirtildiğini unutmayın. AddBatchJobOperations, üç istek eşiğinden herhangi biri (toplam 41.937.920 istek baytı, tek işlem için 10.484.504 bayt veya çağrı başına 10.000 işlem) aşıldığında aynı hata kodunu döndürür. Hatanın message alanında hangi sınırın ihlal edildiği belirtilir.