Martin Rylko
  • Služby
  • Blog
  • O mně
  • Kontakt
  • Spolupráce
Martin Rylko

Senior Cloud Architect & DevOps Engineer. Specializace na Microsoft Azure, IaC, Cloud Security a AI.

Navigace

  • Služby
  • Blog
  • O mně
  • Kontakt

Spolupráce

Hledáte zkušeného architekta pro Váš Azure projekt? Ozvěte se.

rylko@cloudmasters.cz

© 2026 Martin Rylko. Všechna práva vyhrazena.

Buduji v cloudu. Nasazuji přes Azure Static Web Apps.

Domů/Blog/Azure Cosmos DB cost optimization: 8 pák, jak snížit RU/s účet
Všechny článkyRead in English

Azure Cosmos DB cost optimization: 8 pák, jak snížit RU/s účet

15. 6. 2026 5 min
#Azure#Cosmos DB#FinOps#NoSQL#Cost Optimization

Azure Cosmos DB cost optimization: 8 pák, jak snížit RU/s účet

Cosmos DB má zaslouženou pověst „skvělá technologie, drahá faktura". Po dvou letech provozu CostSentry.AI na Cosmos jsem se naučil osmi konkrétních pák, které když všechny zatáhnete, snížíte celkový účet o 40–60 % bez dopadu na výkon nebo dostupnost.

Tenhle článek je destilát toho, co opakovaně dělám na FinOps audit Cosmos workloadů.

Krok 0: pochopit, za co vlastně platíte

Cosmos DB účtuje za dvě věci:

  1. Provisioned/Consumed RU/s (request units per second) – throughput pro database operace
  2. Storage (GB-month) – fixní cena, marginal na celkové faktuře

Storage je v 90 % případů zanedbatelný. RU/s je páka, na které se hraje. Než začnete optimalizovat, spusťte cost breakdown:

az consumption usage list \
  --start-date 2026-05-01 \
  --end-date 2026-06-01 \
  --query "[?contains(consumedService, 'Microsoft.DocumentDB')].{Resource:instanceName, RU:meterDetails.meterName, Cost:pretaxCost}" \
  --output table

Měli byste vidět, kolik RU/s jednotlivé kontejnery konzumují. To je waypoint pro optimalizaci.

Páka 1: Provisioned vs Serverless rozhodnutí

ScenarioDoporučeníDůvod
Dev/test, <5 000 RU/s burstServerlessPay per RU consumed, žádné min
Production, >5 000 RU/s sustainedProvisioned (autoscale)Levnější per-RU na vyšším throughputu
Spike-heavy (5× nominal)Provisioned autoscaleBez throttling, accommodates spikes
Constant predictable loadProvisioned manualNejnižší per-RU cena

Pro CostSentry.AI dev/test environment jsme přepnutím z Provisioned (4 000 RU/s) na Serverless snížili účet z 180 USD na 40 USD měsíčně. Pro produkci jsme zůstali na Provisioned autoscale.

Páka 2: Autoscale tuning

Defaultní autoscale nastavení je max 4 000 RU/s. Většina dev kontejnerů to nepotřebuje. Vždy:

  1. Zkontrolujte aktuální peak v posledních 30 dnech přes Metrics → Total Request Units
  2. Nastavte max na 1.3× peak (ne 4 000, ne 10 000 – konkrétní číslo podle vašich dat)
resource container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2024-08-15' = {
  name: 'users'
  parent: database
  properties: {
    resource: {
      id: 'users'
      partitionKey: { paths: ['/tenantId'], kind: 'Hash' }
    }
    options: {
      autoscaleSettings: {
        maxThroughput: 2000  // ne 4000 default!
      }
    }
  }
}

Per-RU cena autoscale: ~$0.00012 / RU / hodina (vs $0.00008 manual). Když si zvolíte max 2 000 místo 4 000, ušetříte 50 % i v idle – autoscale neúčtuje za nepoužitou kapacitu, ale baseline je 10 % maxima.

Páka 3: Indexing policy optimization

Default indexing policy v Cosmos je /* – indexuje všechno. To zvyšuje write cost o 20–40 % vs explicit policy. Pokud děláte query jen na konkrétní property:

{
  "indexingMode": "consistent",
  "includedPaths": [
    { "path": "/tenantId/?" },
    { "path": "/createdAt/?" },
    { "path": "/email/?" },
    { "path": "/status/?" }
  ],
  "excludedPaths": [
    { "path": "/*" },
    { "path": "/_etag/?" }
  ]
}

To indexuje pouze 4 fields. Write RU cost klesne z ~10 RU per document na ~6 RU per document = 40 % úspora na writes.

V CostSentry.AI jsme touto změnou na jednom kontejneru (events, 500k zápisů/den) snížili cost z 80 USD/měsíc na 52 USD.

Pozor: změnu indexing policy Cosmos provádí jako background reindex, který může trvat hodiny až dny u velkých kontejnerů. Monitor přes:

// Cosmos SDK – check reindex progress
const { resource: container } = await client
  .database('mydb')
  .container('users')
  .read();
console.log(`Indexing transformation: ${container.indexTransformationProgress}%`);

Páka 4: TTL pro ephemeral data

Pokud máte data, která mají časovanou platnost (sessions, audit logs, cached query results, expired notifications), nastavte container-level TTL místo ruční deletion:

resource sessionContainer 'Microsoft.DocumentDB/.../containers@2024-08-15' = {
  name: 'sessions'
  parent: database
  properties: {
    resource: {
      id: 'sessions'
      partitionKey: { paths: ['/userId'], kind: 'Hash' }
      defaultTtl: 86400  // 24 hodin v sekundách
    }
  }
}

TTL deletion stojí 0 RU – Cosmos to dělá v rámci background maintenance. Oproti tomu manual DELETE volání stojí ~5 RU per dokument plus aplikační overhead.

Pro variabilní TTL per document použijte ttl property na dokumentu:

await container.items.create({
  id: 'session-123',
  userId: 'user-456',
  ttl: 3600,  // tento dokument expiruje za hodinu, ne za 24
  data: { ... }
});

Páka 5: Partition key design (cost driver number 1)

Špatný partition key není jen výkonový problém – je to největší cost driver. Hot partition znamená:

  • Cosmos musí rozdělovat partition (overhead RU/s)
  • Throttling i přes vysoký provisioned throughput
  • Cross-partition queries (5–10× dražší než single-partition)

Pravidla:

  1. Cardinality: minimálně tisíce unikátních hodnot
  2. Uniform distribution: žádná hodnota by neměla mít >5 % všech dokumentů
  3. Query-aligned: query často filtruje podle této hodnoty

V CostSentry.AI jsme původně měli /customerId jako PK pro events. Pro velké zákazníky to znamenalo hot partition. Refactor na /customerId-${YYYYMM} (sloučenina customer + měsíc) rozloženo zatížení rovnoměrně a snížilo cross-partition query cost o 60 %.

Páka 6: Bulk operations pro write-heavy workloady

Pokud zapisujete 100+ dokumentů najednou, single-document inserts spalují RU. Použijte bulk:

// Místo loop přes insert
const operations = items.map(item => ({
  operationType: 'Create',
  resourceBody: item
}));
 
const response = await container.items.bulk(operations);

Bulk operations sdílejí networking overhead a Cosmos je dávkuje – výsledek je 30–40 % nižší RU cost per dokument oproti loop variantě.

Páka 7: Reserved Capacity pro Provisioned

Stejně jako VM Reserved Instances, Cosmos DB má Reserved Capacity – platíte za 1Y nebo 3Y commitment a získáváte 20–65 % slevu:

TermSleva
1-year20 %
3-year65 %

Pro produkční workload s stabilním 10 000 RU/s baseline to znamená:

Pay-as-you-go:     ~580 USD/měsíc
1-year Reserved:   ~465 USD/měsíc  (-20%)
3-year Reserved:   ~205 USD/měsíc  (-65%)

Pozor: od léta 2024 Microsoft zrušil exchange pro Cosmos DB Reserved Capacity (pouze refund). Pokud plánujete re-platforming v horizontu 2 let, kupte 1-year místo 3-year.

Páka 8: Multi-region replikace audit

Defaultní mindset architektů je „pro produkci zapneme multi-region kvůli HA". Cosmos DB účtuje každý region jako samostatnou provisioned kapacitu:

SetupRU/s cost multiplier
Single region (zone-redundant)1.25×
2 regions (read replica)2×
3 regions3×
5 regions5×

Pro most workloads je zone-redundant single region (99.995% SLA) dostatečný. Multi-region zapínejte jen když:

  1. Máte explicit business requirement na geographic redundancy
  2. Máte read traffic z více kontinentů a latency requirement <100 ms p99
  3. Compliance vyžaduje data residency v multiple regions

V Christie's jsme našli 4 produkční Cosmos účty s multi-region setup z roku 2022, kdy se ještě nikdo neptal proč. Přepnutí na zone-redundant single region snížilo Cosmos faktury o ~1 800 EUR/měsíc dohromady.

FinOps audit checklist pro Cosmos DB

KrokOčekávaná úsporaNáročnost
Přepnout dev/test na Serverless50–80 % na non-prodNízká
Tunit autoscale max na 1.3× peak20–40 % na overprovisionedNízká
Optimalizovat indexing policy20–40 % na writesStřední
Nastavit container TTL pro ephemeral data100 % na manual deletesNízká
Audit partition key cardinality/distribution30–60 % na cross-partition queriesVysoká
Bulk operations pro write-heavy30–40 % na bulk write pathsStřední
Reserved Capacity 1Y na stable workload20 % na baselineNízká
Audit multi-region nutnostaž 50 % na zbytečné replikyNízká

Závěr

Cosmos DB cost optimization je řemeslo – žádný silver bullet, ale osm konkrétních pák s kumulativním efektem 40–60 % redukce. V CostSentry.AI jsme po implementaci všech bodů snížili Cosmos účet z 380 USD/měsíc na 145 USD bez ztráty funkcionality nebo SLA.

Klíčový princip: Cosmos není drahý, je špatně nakonfigurovaný. Defaulty Microsoft optimalizoval pro „funguje hned", ne pro „je nejlevnější". Tři hodiny FinOps auditu vám vrátí tisíce EUR ročně.

Potřebujete pomoc s Cosmos DB FinOps auditem? Podívejte se na naše služby cloudové architektury nebo se ozvěte pro NoSQL cost review.

Tagy:#Azure#Cosmos DB#FinOps#NoSQL#Cost Optimization
LinkedInX / Twitter

O autorovi

Martin Rylko

Martin Rylko

Senior Cloud Architect & DevOps Engineer

Více než 14 let v IT – od on-premises datacenter a Hyper-V clusteringu po cloudovou infrastrukturu v Microsoft Azure. Specializuji se na Landing Zones, IaC automatizaci, Kubernetes a bezpečnostní compliance.

Email LinkedInCelý profil

Nejcastejsi dotazy

Kdy přepnout Cosmos DB z Provisioned na Serverless?▾
Serverless je výhodný pro workloady pod 5 000 RU/s průměrné spotřeby s burst pattern – dev/test prostředí, prototypy, low-traffic API. Pro produkční workload nad 5 000 RU/s je Provisioned (autoscale) levnější. V CostSentry.AI jsme přepnuli dev tier na Serverless a snížili Cosmos účet z 180 USD/měsíc na ~40 USD bez dopadu na vývojový tým.
Co je autoscale a kdy nahradí manual scaling?▾
Autoscale automaticky upravuje provisioned RU/s mezi 10–100 % nastaveného maxima podle skutečné zátěže. Účtuje se za vyšší ze dvou hodnot: skutečně spotřebované RU/s nebo 10 % maxima. Výhody: žádné throttling během spikes, žádné předpotopní planning. Nevýhody: o 50 % vyšší per-RU/s cena oproti manual. Vyplatí se, když máte denní variability více než 3:1 (např. business hours vs noc).
Jak indexing policy ovlivňuje cost?▾
Cosmos DB defaultně indexuje všechny property všech dokumentů. To zvyšuje write RU/s cost o 20–40 % oproti optimalizované policy. Pokud děláte queries jen na 3–5 polí, vyloučte zbytek přes excludedPaths v indexing policy. V CostSentry.AI jsme touto změnou snížili write cost z ~80 USD/měsíc na ~52 USD pro stejný throughput.
Vyplatí se multi-region replikace pro non-critical workloady?▾
Pro non-critical workloady ne. Každý další region násobí provisioned RU/s celkový cost – 5 regionů = 5× cena. Multi-region použijte pouze pro workloady s explicit SLA na geographic redundancy nebo s read traffic z více kontinentů. Pro většinu enterprise workloadů stačí jeden region s zone-redundant configuration (3× RU/s ale s 99.995% SLA).

Mohlo by vás zajímat

Azure FinOps: 7 kroků ke snížení cloud nákladů o 30 %

Praktický průvodce Azure FinOps – od Cost Management přes right-sizing VM až po Reserved Instances a automatické škálování. Reálné úspory z enterprise projektů.

Číst

Azure Reserved Instances a Savings Plans: Strategie pro konec fiskálního roku

Kompletní průvodce nákupem Azure Reserved Instances a Savings Plans před koncem fiskálního roku. Coverage analýza, exchange pravidla a reálné výpočty z enterprise projektů.

Číst

Azure Functions Flex Consumption: Kdy nahradit Premium plan v 2026

Flex Consumption je třetí cesta mezi Consumption a Premium plánem pro Azure Functions. Praktický rozbor cenového modelu, VNet integration a kdy přepnout z Premium plánu.

Číst