Birçok Google Ads uygulamasının temel işlevi, veri analizi, müşteri sorguları ve politikaya uygunluk kontrolleri gibi kullanım alanları için hesap verilerini almaktır. Verileri getirirken Google sunucularının aşırı yüklenmemesi veya hız sınırlamasına tabi tutulma riski olmaması için kullanımınızı optimize etmeniz gerekir. Daha fazla bilgi için hızı sınırlama ve güncel bir iletişim e-posta adresi kullanmayla ilgili kılavuzları inceleyin.
Google'ın raporlar için kaynak kullanımı politikasını anlama
Google Ads API, sunucularının kararlılığını sağlamak için aşırı miktarda API kaynağı tüketen GoogleAdsService.Search
ve GoogleAdsService.SearchStream
sorgu kalıplarını kısıtlar. Belirli bir sorgu kalıbı sınırlandırılırsa diğer hizmetler, yöntemler ve sorgu kalıpları bu durumdan etkilenmeden çalışmaya devam eder. Kısıtlanmış istekler için aşağıdaki hatalar atılır:
API Sürümü | Hata kodu |
---|---|
<= v17 | QuotaError.RESOURCE_EXHAUSTED |
>= v18 | Yüksek kaynak kullanımının süresine bağlı olarak QuotaError.EXCESSIVE_SHORT_TERM_QUERY_RESOURCE_CONSUMPTION veya QuotaError.EXCESSIVE_LONG_TERM_QUERY_RESOURCE_CONSUMPTION . |
Pahalı raporlarınızı tespit etmenize ve izlemenize yardımcı olmak için her rapor için bir maliyet metriği de döndürürüz.
Yöntem | Maliyet alanı |
---|---|
GoogleAdsService.Search |
SearchGoogleAdsResponse.query_resource_consumption |
GoogleAdsService.SearchStream |
SearchGoogleAdsStreamResponse.query_resource_consumption |
Bu alanlar tarafından döndürülen maliyet metriği aşağıdakiler gibi çeşitli faktörlere bağlıdır:
- Hesaplarınızın boyutu
- Raporlarınızda getirdiğiniz görünümler ve sütunlar
- Google Ads API sunucularındaki yük.
Pahalı sorguları izlemenize yardımcı olmak için sunucularımızda gördüğümüz çeşitli sorgu kalıplarının kaynak tüketimi hakkında ilk toplu istatistikleri yayınlıyoruz. Sorgularınızda ince ayar yapmanıza yardımcı olmak için güncellenmiş sayıları düzenli olarak yayınlayacağız.
Zaman aralığı | Ortalama (p50). | P70 (Orta-yüksek) | P95 (Çok yüksek) |
---|---|---|---|
Kısa süreli (5 dakika) | 6.000 | 30000 | 1800000 |
Uzun süreli (24 saat). | 16000 | 90000 | 8400000 |
Örneğin, rapor başına 600 birim kaynak tüketen aşağıdaki gibi bir sorgu kalıbı çalıştırdığınızı varsayalım.
SELECT campaign.id, campaign.name, metrics.cost_micros FROM campaign WHERE
segments.date = "YYYY-MM-DD"
Sorguyu, segments.date
filtresi için farklı değerlerle değiştirecek şekilde değiştirerek birden fazla müşteri hesabı için birden fazla tarihte çalıştırırsınız. Aşağıdaki tabloda, belirli bir zaman aralığında çalıştırabileceğiniz raporların sayısı gösterilmektedir. Bu raporlar, kaynak kullanımınızı çeşitli kaynak kullanımı gruplarına sığdırır.
Zaman aralığı | Ortalama | Orta düzeyde yüksek | Çok yüksek |
---|---|---|---|
Kısa süreli (5 dakika) | 10 | 50 | 3000 |
Uzun süreli (24 saat). | 26 | 150 | 14000 |
Bu sorgu kalıbının 5 dakika içinde 10 kez çalıştırılması ortalama kullanım olarak kabul edilirken 5 dakika içinde 3.000 raporun çalıştırılması çok yüksek kullanım olarak kabul edilir.
Raporlarınızın kaynak tüketimini optimize etmek için çeşitli stratejiler vardır. Bu kılavuzun geri kalanında bu stratejilerden bazıları ele alınmaktadır.
Verilerinizi önbelleğe alma
Özellikle sık erişilen veya nadiren değişen varlıklar için, verilere her ihtiyaç duyduğunuzda sunucuyu çağırmaktansa API sunucularından aldığınız varlık ayrıntılarını yerel bir veritabanında önbelleğe almanız gerekir. Sonuçları en son senkronize ettiğinizden bu yana hangi nesnelerin değiştiğini tespit etmek için mümkün olduğunda change-event ve change-status öğelerini kullanın.
Raporların çalıştırılma sıklığını optimize etme
Google Ads, verilerin güncelliği ve verilerin ne sıklıkta güncellendiğiyle ilgili yönetmelik yayınlamıştır. Raporları ne sıklıkta getireceğinizi belirlemek için bu kılavuzu kullanmanız gerekir.
Hesapları düzenli olarak güncellemeniz gerekiyorsa bu tür hesapların sayısını küçük bir grupla (ör. yalnızca en iyi yirmi Google Ads hesabı) sınırlandırmanızı öneririz. Diğer veriler daha düşük bir sıklıkta (ör. günde bir veya iki kez) güncellenebilir.
Raporlarınızın boyutunu optimize etme
Uygulamanız çok sayıda küçük rapor çalıştırmak yerine büyük veri grupları getirmelidir. Bu seçimde hesap sınırlamaları da etkilidir.
Örneğin, belirli reklam gruplarının istatistiklerini alan ve bir istatistik veritabanı tablosunu güncelleyen aşağıdaki kodu ele alalım:
List<long> adGroupIds = FetchAdGroupIdsFromLocalDatabase();
foreach (long adGroupId in adGroupIds)
{
string query = "SELECT ad_group.id, ad_group.name, metrics.clicks, " +
"metrics.cost_micros, metrics.impressions, segments.date FROM " +
"ad_group WHERE segments.date DURING LAST_7_DAYS AND " +
"ad_group.id = ${adGroupId}";
List<GoogleAdsRow> rows = RunGoogleAdsReport(customerId, query);
InsertRowsIntoStatsTable(adGroupId, rows);
}
Bu kod, küçük bir test hesabında iyi çalışır. Ancak Google Ads, kampanya başına 20.000'e kadar reklam grubu ve hesap başına 10.000 kampanyayı destekler. Bu nedenle, bu kod büyük bir Google Ads hesabında çalıştırılırsa Google Ads API sunucularının yükünü artırarak hız sınırlamasına ve akış kısıtlamasına neden olabilir.
Daha iyi bir yaklaşım, tek bir rapor çalıştırmak ve bunu yerel olarak işlemektir. Bellek içi harita kullanan bu yaklaşımlardan biri gösterilmektedir.
Hashset<long> adGroupIds = FetchAdGroupIdsFromLocalDatabase();
string query = "SELECT ad_group.id, ad_group.name, metrics.clicks, " +
"metrics.cost_micros, metrics.impressions, segments.date FROM " +
"ad_group WHERE segments.date DURING LAST_7_DAYS";
List<GoogleAdsRow> rows = RunGoogleAdsReport(customer_id, query);
var memoryMap = new Dictionary<long, List<GoogleAdsRow>>();
for each (GoogleAdsRow row in rows)
{
var adGroupId = row.AdGroup.Id;
if (adGroupIds.Contains(adGroupId))
{
CheckAndAddRowIntoMemoryMap(row, adGroupId, memoryMap);
}
}
foreach (long adGroupId in memoryMap.Keys())
{
InsertRowsIntoStatsTable(adGroupId, rows);
}
Bu, çalıştırılan rapor sayısı daha az olduğu için Google Ads API sunucularındaki yükü azaltır.
Raporun bellekte tutulamayacak kadar büyük olduğunu fark ederseniz aşağıdaki gibi bir LIMIT
yan tümcesi ekleyerek sorguyu daha küçük gruplara da bölebilirsiniz:
SELECT
ad_group.id,
ad_group.name,
metrics.clicks,
metrics.cost_micros,
metrics.impressions,
segments.date
FROM ad_group
WHERE segments.date DURING LAST_7_DAYS
AND ad_group.id IN (id1, id2, ...)
LIMIT 100000
Etiketler, öğeleri gruplandırmanın ve raporlama sorgularının sayısını azaltmanın başka bir yoludur. Daha fazla bilgi için etiket kılavuzuna bakın.
Getirdiğiniz verileri optimize etme
Rapor çalıştırırken sorgularınıza eklediğiniz sütunlara dikkat etmeniz gerekir. Her saat çalıştırılmak üzere planlanmış aşağıdaki örneği inceleyin:
SELECT
customer.id,
customer.currency_code,
campaign.id,
campaign.name,
ad_group.id,
ad_group.name,
ad_group_criterion.keyword.match_type,
ad_group_criterion.keyword.text,
ad_group_criterion.criterion_id,
ad_group_criterion.quality_info.creative_quality_score,
ad_group_criterion.system_serving_status,
ad_group_criterion.negative,
ad_group_criterion.quality_info.quality_score,
ad_group_criterion.quality_info.search_predicted_ctr,
ad_group_criterion.quality_info.post_click_quality_score,
metrics.historical_landing_page_quality_score,
metrics.search_click_share,
metrics.historical_creative_quality_score,
metrics.clicks,
metrics.impressions
FROM keyword_view
WHERE segments.date DURING LAST_7_DAYS
Her saat değişebilecek tek sütunlar metrics.clicks
ve metrics.impressions
'dır. Diğer tüm sütunlar nadiren veya hiç güncellenmez. Bu nedenle, bunları saatlik olarak getirmenin verimliliği çok düşüktür. Bu değerleri yerel bir veritabanında saklayabilir ve değişiklikleri günde bir veya iki kez indirmek için bir change-event veya change-status raporu çalıştırabilirsiniz.
Bazı durumlarda, uygun filtreleri uygulayarak indirdiğiniz satır sayısını azaltabilirsiniz.
Kullanılmayan hesapları temizleme
Uygulamanız üçüncü taraf müşteri hesaplarını yönetiyorsa uygulamanızı müşteri kaybını göz önünde bulundurarak geliştirmeniz gerekir. Artık uygulamanızı kullanmayan müşterilerin hesaplarını kaldırmak için süreçlerinizi ve veri depolarınızı düzenli olarak temizlemeniz gerekir. Kullanılmayan Google Ads hesaplarını temizlerken aşağıdaki yönergeleri göz önünde bulundurun:
- Müşterinizin, hesabını yönetmek için uygulamanıza verdiği yetkiyi iptal edin.
- Müşterinin Google Ads hesaplarına API çağrısı yapmayı bırakın. Bu, özellikle kullanıcı müdahalesi olmadan çalışacak şekilde tasarlanmış cron işleri ve veri ardışık düzeni gibi çevrimdışı işler için geçerlidir.
- Müşteri yetkisini iptal ettiyse uygulamanız bu durumu sorunsuz bir şekilde ele almalı ve Google'ın API sunucularına geçersiz API çağrıları göndermekten kaçınmalıdır.
- Müşteri Google Ads hesabını iptal ettiyse bunu algılamanız ve Google'ın API sunucularına geçersiz API çağrıları göndermekten kaçınmanız gerekir.
- Müşterinin Google Ads hesaplarından indirdiğiniz verileri uygun bir süre sonra yerel veritabanınızdan silin.