BatchJobService özelliğini kullanırken bu yönergeleri göz önünde bulundurun.
İşleme kapasitesini artırma
Çok sayıda küçük iş yerine 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 bölünmezlik
Google Ads API, gönderilen bir toplu işteki işlemleri işlemek için 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). - Hemen ardından aynı
AssetGroupöğesini hedefleyen en fazla 999AssetGroupAssetOperation(create) işleminin geldiği 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 ayarlanmadan bırakılmış, çünkü açıkçafalseolarak ayarlanmadığı veya seyahat hedefleri için Maksimum Performans kampanyası oluşturulmadığı sürece varsayılan olaraktruedeğerine ayarlanır) 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). Perakende Maksimum Performans kampanyaları (Merchant Center feed'i içeren), aynı atomik alt gruptaki 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ş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 üstcreateve alt bağlantıcreateişlemlerinin 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 alt grubun 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ş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 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 koşulları her atomik alt toplu işlemin sonunda doğrulandığından, aynı üst kaynakta yapılan 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önderirken işlerin aynı anda aynı nesneler üzerinde çalışma olasılığını azaltın ve iş boyutlarını büyük tutun. 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çlar ö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ğerinin ötesinde inceliyorsaMUTABLE_RESOURCEolarak ayarlayın.Sonuçların sırası, yükleme sırasıyla aynıdır.
Ek kullanım kılavuzu
Toplu işlerin iptal edilmeden önce ne kadar süre çalıştırılabileceğine dair bir ü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 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_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 yeniden deneyerek bu hatayı giderebilirsiniz.
Sınırlamalar
Her
BatchJoben fazla bir milyon işlemi destekler.AddBatchJobOperationsçağrılırken bu sınırın aşılması,ResourceCountLimitExceededError.RESOURCE_LIMIThatası (ErrorDetails.resource_count_detailsiçindeResourceLimitType.BATCH_JOB_OPERATIONS_PER_JOBile) döndürür.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ı (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
AddBatchJobOperationsRequest, istek başına 10.000 değişiklik işlemiyle sınırlıdı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. Göndermeden önce isteğin 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 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 dokümanlarında 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.