En iyi uygulamalar ve sınırlamalar

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

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 create işlemi (resource_name on AssetGroup veya Campaign) ve ardışık alt create işlemleri (asset_group on AssetGroupAsset veya campaign on CampaignAsset) aynı negatif geçici ID'yi belirtmelidir.
  • Yeni Asset kaynakları için ön koşul olan AssetOperation (create) işlemlerini üst AssetGroupOperation veya CampaignOperation (create) işlemlerinden önce yerleştirin. Bu işlemler, üst create ve alt bağlantı create iş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, RUNNING durumundaki 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ırken page_size ayarlanmamış olarak bırakın (veya 1000 maksimum değerine ayarlayın). response_content_type değerini yalnızca uygulamanız döndürülen kaynak alanlarını resource_name dışında inceliyorsa MUTABLE_RESOURCE olarak 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_seconds alanını tercih ettiğiniz zaman sınırına (saniye cinsinden) ayarlayın. metadata.execution_limit_seconds ayarlanmamışsa varsayılan 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 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 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_LIMIT hatası döndürür (ErrorDetails.resource_count_details içinde ResourceLimitType.BATCH_JOB_OPERATIONS_PER_JOB ile).

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

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

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

  • page_size alanında ListBatchJobResultsRequest için:

  • Her AddBatchJobOperationsRequest, maksimum 41.937.920 bayt boyutuna sahip olabilir. Bu sınırı aşarsanız BatchJobError.REQUEST_TOO_LARGE hatası (veya taşıma katmanında reddedilirse INTERNAL_ERROR hatası) 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.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 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.