BatchJobService özelliğini kullanırken bu yönergeleri göz önünde bulundurun.
İşleme kapasitesini artırma
Ç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ğlı işlemler hariç). Örneğin, işiniz standart kampanyalar, reklam grupları ve reklam grubu ölçütleri ekleme işlemleri içeriyorsa 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 gelecek şekilde sıralayın.
Aynı türdeki işlemleri üst kaynağa göre gruplandırmak performansı artırabilir. Örneğin, bir dizi
AdGroupCriterionOperationnesneniz varsa işlemleri reklam grubuna göre gruplandırmak, farklı reklam gruplarındaki reklam grubu ölçütlerini etkileyen işlemleri karıştırmaktan daha verimlidir.
Toplu bölme işleminde atomiklik
Google Ads API, gönderilen bir toplu işteki işlemleri işlenmek üzere daha küçük alt gruplara böler. Standart alt gruplar kısmi hata etkinleştirilmiş olarak yürütülürken birbirine bağlı belirli işlemler için alt gruplar tek bir işlem olarak atomik şekilde işlenir:
- Aynı
AdGroupöğesini hedefleyenLISTING_GROUPölçütleri (AdGroupCriterion.listing_group) için ardışıkAdGroupCriterionOperationiş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öğesini hedefleyen ardışıkAssetGroupListingGroupFilterOperationişlemleri (create,updateveremove) (gruptaki herhangi bir işlem başarısız olursaBatchJobError.ASSET_GROUP_LISTING_GROUP_FILTER_TRANSACTION_FAILUREile başarısız olur). - Aynı
AssetGroupöğesini hedefleyen en fazla 999AssetGroupAssetOperation(create) işleminin hemen ardından gelen 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 grubunda yürütülür. - Marka kuralları etkinleştirilmiş (
brand_guidelines_enabled,trueolarak ayarlanmış veya açıkçafalseolarak ayarlamadığınız ya da seyahat hedefleri için Maksimum Performans kampanyası oluşturmadığınız sürece varsayılan olaraktruedeğerine ayarlandığı için ayarlanmamış) bir Maksimum PerformansCampaignOperation(create) ve hemen ardından aynıCampaignöğesini hedefleyen en fazla 999CampaignAssetOperation(create) işlemi (gruptaki herhangi bir işlem başarısız olursaBatchJobError.CAMPAIGN_AND_CAMPAIGN_ASSET_TRANSACTION_FAILUREile başarısız olur). Yerel Hizmetler Maksimum Performans kampanyaları, marka kurallarını desteklemez ve markaCampaignAssetkaynaklarını atlar (kampanyayı oluştururkenbrand_guidelines_enableddeğerinifalseolarak ayarlayın). Perakende Maksimum Performans kampanyaları (Merchant Center feed'i içeren), yalnızca özelAssetGroupAssetkaynakları (HTML5MEDIA_BUNDLEöğeleri hariç) içermeyen öğesiz bir kampanya oluşturduğunuzda veyabrand_guidelines_enabled,falseolarak ayarlandığında aynı atomik alt gruptaki markaCampaignAssetkaynaklarını atlayabilir.
Hem AssetGroup hem de Maksimum Performans Campaign oluşturma alt grupları için (alt grup başına toplam 1.000 işleme kadar; 999'un üzerindeki tüm alt create işlemleri bir sonraki atomik olmayan alt gruba taşınır):
- Üst
createişlemi (AssetGroupveyaCampaignüzerinderesource_name) ve ardışık altcreateişlemleri (AssetGroupAssetüzerindeasset_groupveyaCampaignAssetüzerindecampaign) aynı negatif geçici ID'yi belirtmelidir. - Yeni
Assetkaynakları için ön koşul niteliğindeki tümAssetOperation(create) işlemlerini üstAssetGroupOperationveyaCampaignOperation(create) işleminden önce yerleştirin. Bu işlemleri hiçbir zaman üstcreateişlemi ile alt bağlantıcreateişlemleri arasına yerleştirmeyin (bu, atomik alt grubu hemen kapatır ve üst kaynak oluşturma işlemini bağlı öğelerinden ayırır).
Atomik bir alt grup başarısız olduğunda, sorunlu işlemin BatchJobResult.status öğesi temel doğrulama hatasını içerir. Bu alt gruptaki diğer işlemler ise ilgili işlem hatasıyla geri alınır. Temel neden hatasını belirlemek için aynı AdGroup, AssetGroup veya Campaign kimliğini paylaşan bitişik BatchJobResult girişlerini inceleyin.
Bu gruplardan herhangi birindeki ilgili işlemler art arda eklenmezse Google Ads API, bunları ayrı alt gruplara böler. Bu da değişikliğin minimum öğe şartlarını karşılayamaması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 toplu işleme başlıklı makaleleri inceleyin.
Mantıksal gruplandırma
Bir ürün hedefleme hiyerarşisini değiştirdiğinizde (Maksimum Performans kampanyalarında AssetGroupListingGroupFilterOperation veya Alışveriş kampanyalarında AdGroupCriterionOperation) ya da yeni bir AssetGroup veya Maksimum Performans Campaign oluşturduğunuzda, aynı üst kaynağı (AssetGroup, AdGroup veya Campaign) hedefleyen tüm işlemleri ardışık olarak gruplandırın. Bu sayede arka uç kilit çekişmesi azalır ve birbirine bağlı ağaçlar bir arada tutulur.
Veri tutarlılığı
Listeleme grubu filtre ağaçları ve Maksimum Performans öğesi şartları her atomik alt toplu işlemin sonunda doğrulandığından, aynı üst kaynakla ilgili güncellemeleri bir işteki süreksiz aralıklara veya eşzamanlı işlere bölmeyin.
Eşzamanlılık sorunlarını önleme
Aynı hesap için aynı anda birden fazla iş gönderdiğinizde, işlerin aynı anda aynı nesneler üzerinde çalışma olasılığını azaltırken büyük iş boyutlarını koruyun. Aynı nesne grubunu değiştirmeye çalışan,
RUNNINGdurumundaki tamamlanmamış birçok iş, kilitlenmeye benzer durumlara yol açarak ciddi yavaşlamaya ve hatta iş hatalarına neden olabilir.Aynı iş içinde aynı nesneyi değiştiren birden fazla işlem göndermeyin. Aksi takdirde sonuç öngörülemez olabilir.
Sonuçları en iyi şekilde alma
İş durumunu çok sık sorgulamayın. Aksi takdirde sıklık sınırlaması hatalarıyla karşılaşabilirsiniz.
Sayfalandırma gidiş dönüşlerini en aza indirmek için
ListBatchJobResultsyöntemini çağırırkenpage_sizeparametresini ayarlamayın (veya maksimum değer olan1000olarak ayarlayın).response_content_typeparametresini yalnızca uygulamanız döndürülen kaynak alanlarınıresource_namedeğerinden daha fazla inceliyorsaMUTABLE_RESOURCEolarak ayarlayın.Sonuçların sırası, yükleme sırasıyla aynıdır.
Ek kullanım kılavuzu
Toplu işin iptal edilmeden önce ne kadar süre çalışmasına izin verileceğiyle ilgili yaklaşık bir üst sınır belirleyebilirsiniz. Yeni bir toplu iş oluştururken
metadata.execution_limit_secondsalanını, tercih ettiğiniz zaman sınırını saniye cinsinden belirten pozitif bir tam sayıya ayarlayın.metadata.execution_limit_secondsayarlanmamışsa varsayılan bir 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_tokenyöntemini kullanmanı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 yeniden deneyerek bu hatayı giderebilirsiniz.
Sınırlamalar
Her
BatchJoben fazla bir milyon işlemi destekler.AddBatchJobOperationsyöntemini çağırırken bu sınırı aşarsanızResourceCountLimitExceededError.RESOURCE_LIMIThatası (ErrorDetails.resource_count_detailsiçindeResourceLimitType.BATCH_JOB_OPERATIONS_PER_JOBile) döndürülür.Her hesapta aynı anda en fazla 100 etkin veya bekleyen iş olabilir.
MutateBatchJobile bir toplu iş oluştururken bu sınırın aşılması,ResourceCountLimitExceededError.RESOURCE_LIMIThatası (ErrorDetails.resource_count_detailsiçindeResourceLimitType.BATCH_JOBS_PER_CUSTOMERile) döndürür.7 günden eski bekleyen işler otomatik olarak kaldırılır.
Her
AddBatchJobOperationsRequestiçin istek başına 10.000 değişiklik işlemi şeklinde kesin bir sınır vardır. Tek bir istekte 10.000 işlem aşılırsaBatchJobError.REQUEST_TOO_LARGEhatası döndürülür.ListBatchJobResultsRequestiçindekipage_sizealanı için:page_sizeayarlanmamışsa veya0ise varsayılan olarak maksimum1000değerine ayarlanır.page_size,1000değerini aşarsa veya0değerinden küçükse API,BatchJobError.INVALID_PAGE_SIZEhatası döndürür.
Her
AddBatchJobOperationsRequesten fazla 41.937.920 bayt boyutunda olabilir. Bu sınırı aşarsanızBatchJobError.REQUEST_TOO_LARGEhatası (veya taşıma katmanında reddedilirseINTERNAL_ERROR) 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) # Supports both proto-plus (use_proto_plus=True) and native protobuf # (use_proto_plus=False) messages. pb = type(request).pb(request) if hasattr(type(request), "pb") else request size_in_bytes = pb.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 bir değiştirme işleminin boyutu
Genel istek boyutu 41.937.920 bayta kadar çıkabilir ancak gruptaki 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ına neden olur. BatchJobError.REQUEST_TOO_LARGE için referans belgelerinde 10.484.504 baytlık eşik belirtilse de AddBatchJobOperations, üç istek eşiğinden herhangi biri (toplam 41.937.920 istek baytı, 10.484.504 tek işlem baytı veya çağrı başına 10.000 işlem) aşıldığında aynı hata kodunu döndürür. Hatanın message alanı, hangi sınırın ihlal edildiğini belirtir.