En iyi uygulamalar ve sınırlamalar

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 AdGroupCriterionOperation nesneniz 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:

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 create işlemi (AssetGroup veya Campaign üzerinde resource_name) ve ardışık alt create işlemleri (AssetGroupAsset üzerinde asset_group veya CampaignAsset üzerinde campaign) aynı negatif geçici ID'yi belirtmelidir.
  • Yeni Asset kaynakları için ön koşul niteliğindeki tüm AssetOperation (create) işlemlerini üst AssetGroupOperation veya CampaignOperation (create) işleminden önce yerleştirin. Bu işlemleri hiçbir zaman üst create işlemi ile alt bağlantı create iş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, RUNNING durumundaki 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 ListBatchJobResults yöntemini çağırırken page_size parametresini ayarlamayın (veya maksimum değer olan 1000 olarak ayarlayın). response_content_type parametresini yalnızca uygulamanız döndürülen kaynak alanlarını resource_name değerinden daha fazla inceliyorsa MUTABLE_RESOURCE olarak 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_seconds alanını, tercih ettiğiniz zaman sınırını saniye cinsinden belirten pozitif bir tam sayıya ayarlayın. metadata.execution_limit_seconds ayarlanmamışsa varsayılan bir süre sınırı yoktur.

  • Protokol sınırı istek başına 10.000 işlem olsa da AddBatchJobOperationsRequest başına en fazla 1.000 işlem eklemenizi ve işlemlerin geri kalanını aynı işe yüklemek için sequence_token yöntemini kullanmanızı öneririz. İşlemlerin boyutuna bağlı olarak, tek bir AddBatchJobOperationsRequest içinde çok fazla işlem göndermek BatchJobError.REQUEST_TOO_LARGE hatasına neden olabilir. İşlem sayısını azaltıp AddBatchJobOperationsRequest işlemini yeniden deneyerek bu hatayı giderebilirsiniz.

Sınırlamalar

  • Her BatchJob en fazla bir milyon işlemi destekler. AddBatchJobOperations yöntemini çağırırken bu sınırı aşarsanız ResourceCountLimitExceededError.RESOURCE_LIMIT hatası (ErrorDetails.resource_count_details içinde ResourceLimitType.BATCH_JOB_OPERATIONS_PER_JOB ile) döndürülür.

  • Her hesapta aynı anda en fazla 100 etkin veya bekleyen iş olabilir. MutateBatchJob ile bir toplu iş oluştururken bu sınırın aşılması, ResourceCountLimitExceededError.RESOURCE_LIMIT hatası (ErrorDetails.resource_count_details içinde ResourceLimitType.BATCH_JOBS_PER_CUSTOMER ile) döndürür.

  • 7 günden eski bekleyen işler otomatik olarak kaldırılır.

  • Her AddBatchJobOperationsRequest iç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ırsa BatchJobError.REQUEST_TOO_LARGE hatası döndürülür.

  • ListBatchJobResultsRequest içindeki page_size alanı için:

  • Her AddBatchJobOperationsRequest en fazla 41.937.920 bayt boyutunda olabilir. Bu sınırı aşarsanız BatchJobError.REQUEST_TOO_LARGE hatası (veya taşıma katmanında reddedilirse INTERNAL_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.bytesize
    

    Perl

    
    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.