Fabric Maliyeti: Forumlarda Patlayan Konu
Microsoft Fabric'e geçen organizasyonların forumda en çok paylaştığı sorun: _"Fabric faturamız beklediğimizden 3 kat fazla geldi!"_ Bu sorun genellikle kapasite yönetimini ve CU (Capacity Unit) tüketimini anlamamaktan kaynaklanır.
Bu rehberde Fabric'in maliyet yapısını açıklıyor, CU tüketimini kontrol altına almak için kanıtlanmış stratejiler paylaşıyoruz.
CU (Capacity Unit) Nedir?
Fabric'te her şey CU ile ölçülür. CU, Fabric kapasitesinin işlem gücü birimidir. Hangi iş yükünü çalıştırırsanız çalıştırın — Notebook, Pipeline, Warehouse sorgusu, Power BI raporu — hepsi CU tüketir.
Kapasite Boyutları ve Fiyatlandırma
| SKU | CU | Yaklaşık Aylık Fiyat (USD) | Uygun Kullanım |
|---|---|---|---|
| F2 | 2 | ~$260 | Geliştirme, test |
| F4 | 4 | ~$520 | Küçük ekipler |
| F8 | 8 | ~$1040 | Orta ölçek |
| F16 | 16 | ~$2080 | Büyük ekipler |
| F32 | 32 | ~$4160 | Kurumsal |
| F64 | 64 | ~$8320 | Enterprise |
CU Tüketimi: Kim Ne Kadar Harcıyor?
Her iş yükünün CU tüketim profili farklıdır:
| İş Yükü | CU Tüketimi | Açıklama |
|---|---|---|
| Power BI Rapor | Düşük | Kullanıcı sorgu anında |
| DirectLake | Çok Düşük | Sadece Delta okuma |
| Notebook (Spark) | Yüksek | Çalıştığı süre boyunca |
| Warehouse Sorgusu | Orta-Yüksek | Sorgu karmaşıklığına bağlı |
| Data Factory Pipeline | Orta | Veri hacmine bağlı |
| Dataflow Gen2 | Orta | Dönüşüm karmaşıklığına bağlı |
Throttling: En Büyük Sorun
CU tüketiminiz kapasitenizi aştığında throttling devreye girer. Fabric, iş yüklerinizi yavaşlatır veya kuyruğa alır.
Smoothing ve Bursting
Fabric, kısa süreli CU aşımlarını tolere eder (bursting). Tüketim 10 dakikalık pencereler üzerinden ortalaması alınarak hesaplanır (smoothing). Yani 2 dakika yoğun çalışıp 8 dakika boş kalırsanız throttling olmaz.
Maliyet Optimizasyon Stratejileri
1. Doğru SKU Seçimi
Çoğu proje F4 ile başlayıp ihtiyaca göre büyütebilir. Geliştirme ortamı için F2 yeterli.
2. İş Saatleri Dışında Kapasiteyi Duraklatın
Azure portal veya REST API ile kapasiteyi programatik olarak başlatıp durdurabilirsiniz:
class="code-comment"># Azure REST API ile kapasite yönetimi
import requests
class="code-comment"># Kapasiteyi duraklat (mesai sonrası)
def suspend_capacity(subscription_id, resource_group, capacity_name, token):
url = fclass="code-string">"https:class="code-comment">//management.azure.com/subscriptions/{subscription_id}/resourceGroups/{resource_group}/providers/Microsoft.Fabric/capacities/{capacity_name}/suspend?api-version=class="code-number">2023-class="code-number">11-class="code-number">01"
headers = {class="code-string">"Authorization": fclass="code-string">"Bearer {token}"}
response = requests.post(url, headers=headers)
return response.status_code
class="code-comment"># Kapasiteyi başlat (mesai başı)
def resume_capacity(subscription_id, resource_group, capacity_name, token):
url = fclass="code-string">"https:class="code-comment">//management.azure.com/subscriptions/{subscription_id}/resourceGroups/{resource_group}/providers/Microsoft.Fabric/capacities/{capacity_name}/resume?api-version=class="code-number">2023-class="code-number">11-class="code-number">01"
headers = {class="code-string">"Authorization": fclass="code-string">"Bearer {token}"}
response = requests.post(url, headers=headers)
return response.status_code3. Spark Notebook Optimizasyonu
Notebook'lar en büyük CU tüketicisi. Optimizasyon fırsatları:
class="code-comment"># ❌ KÖTÜ: Tüm veriyi okuyup filtrele
df = spark.read.format(class="code-string">"delta").load(class="code-string">"Tables/buyuk_tablo")
df_filtered = df.filter(class="code-string">"Yil = class="code-number">2024")
class="code-comment"># ✅ İYİ: Partition pruning ile sadece gerekeni oku
df = spark.read.format(class="code-string">"delta").load(class="code-string">"Tables/buyuk_tablo").filter(class="code-string">"Yil = class="code-number">2024")
class="code-comment"># ✅ İYİ: Sadece gerekli kolonları seç
df = spark.read.format(class="code-string">"delta").load(class="code-string">"Tables/buyuk_tablo") \
.select(class="code-string">"SiparisID", class="code-string">"Tutar", class="code-string">"Yil") \
.filter(class="code-string">"Yil = class="code-number">2024")4. Warehouse Sorgu Optimizasyonu
-- ❌ KÖTÜ: SELECT * ile tüm kolonları çek
SELECT * FROM FactSatis WHERE Yil = 2024;
-- ✅ İYİ: Sadece gerekli kolonlar
SELECT SiparisID, Tutar, MusteriKey
FROM FactSatis
WHERE Yil = 2024;
-- ✅ İYİ: Result set cache kullan
SET result_set_caching ON;
SELECT ... -- Aynı sorgu cache'den döner5. Pipeline Zamanlama
Yoğun pipeline'ları düşük kullanım saatlerine kaydırın:
| Saat | Aktivite | CU Yükü |
|---|---|---|
| 02:00-06:00 | ETL Pipeline | Yüksek (ama throttling riski düşük) |
| 09:00-18:00 | Power BI Raporlama | Düşük-Orta |
| 18:00-02:00 | Kapasite Duraklatılabilir | 0 |
Capacity Metrics App
Microsoft'un ücretsiz Capacity Metrics App'ini kurun. Bu uygulama CU tüketiminizi detaylı görselleştirmeyle gösterir:
- Hangi iş yükü ne kadar tüketiyor?
- Throttling ne zaman gerçekleşti?
- Hangi kullanıcı/işlem en çok CU harcıyor?
Sonuç
Fabric maliyet yönetimi, kapasite boyutlandırma ve CU tüketim optimizasyonu gerektirir. Mesai dışı kapasiteyi duraklatmak, Notebook'ları optimize etmek, Pipeline'ları düşük yük saatlerine planlamak ve Capacity Metrics App ile izlemek — bu dört strateji aylık maliyetinizi %50'ye kadar düşürebilir. Fabric projelerinizin maliyet-performans dengesini birlikte optimize edelim.
