Ctrl+Alt+Shift+IWHAT-IF Lab — teste cada mudança contra tráfego real
Capture last hour (ou last 72h) de tráfego real de produção, clone seu dataset Cosmos pra uma sandbox via PITR, aplique uma mudança hipotética (drop/add index, mudar partition key, trocar consistency level, mudar mode de cobrança, mudar throughput) e veja o impacto em 5 dimensões — RU, latência p95, 429s, plan-cache hits, custo mensal — antes de aplicar em prod.
Where it lives in the app: Tools → Cosmos DB → WHAT-IF Lab
What it does
- Captura tráfego real do app via Query Cost Inspector (in-app) ou Azure Log Analytics (MongoRequests table).
- Provisiona sandbox Cosmos via PITR (continuous backup 7d/30d) — isolado, sem impacto na prod.
- Aceita até 5 mutações simultâneas: add/drop index, change partition key, consistency level, billing mode, throughput por collection.
- Replay do trace capturado contra prod + sandbox em paralelo (rate-controlled).
- Diff side-by-side em 5 dimensões: RU consumption, average + p95 latency, throttle 429 count, query plan cache hit rate, dollar bill mensal.
- Veredito automático (approve / warn / reject) com rationale textual + export JSON pra audit/compliance.
- Modo "preview" com sandbox sintético: roda em 30 segundos sem custo Azure (ideal pra exploração).
- Modo "real": sandbox PITR de verdade, pra confirmação final antes de prod.
Step-by-step
- 1
Abra o workspace
Menu Tools → Cosmos DB → WHAT-IF Lab — Test changes against real workload, ou atalho Ctrl+Alt+Shift+I. O workspace começa no Step 1: Capture.
- 2
Capture o tráfego
Defina a janela em minutos (60 default — ajuste pra 1440 = 24h ou 4320 = 72h para capturar ciclos semanais). Clica "Capture now". Ele lê do ring buffer do Query Cost Inspector (todas as queries que passaram pelo bridge do NoSqlStudio na janela). Mostra contagem total de queries, unique shapes, total RU consumido, namespaces tocados.
window=60 → captura 1h de tráfego window=1440 → captura 24h window=4320 → captura 72h (ciclo semanal completo)
- 3
Stage a sandbox
Step 2 do wizard. Coloca o nome da conta Cosmos source. Restore point default é "agora menos 1 hora" — ajuste se quiser testar contra um snapshot mais antigo. Modo "preview" usa sandbox sintético (recomendado pra primeiras explorações) — modo "real" provisiona Cosmos account novo via PITR (~30 min de criação, custo Azure normal de provisioning).
preview mode → sandbox sintético, sem custo Azure, resultado em 30s real mode → PITR sandbox real, ~30min, custo Azure normal
- 4
Configure WHAT-IF mutations
Step 3. Editor JSON inline com schema validado. Até 5 mutações simultâneas. Cada mutação tem um "kind" e parâmetros próprios. Veja exemplos abaixo.
[ { "kind": "add-index", "ns": "app.orders", "key": { "tenantId": 1, "createdAt": -1 } }, { "kind": "drop-index", "ns": "app.orders", "indexName": "text_search_v1" }, { "kind": "change-partition-key", "ns": "app.events", "newPath": "userId", "strategy": "recreate" }, { "kind": "consistency", "level": "Session" }, { "kind": "mode", "mode": "autoscale", "autoscaleMaxRu": 4000 }, { "kind": "throughput", "ns": "app.orders", "ruPerSec": 2000 } ] - 5
Quick Estimate ou Full Replay
Quick Estimate = resposta em ~5 segundos baseada em heurísticas + valores observados durante o capture. Bom pra iterar rápido enquanto ajusta a mutação. Full Replay = roda CADA query do trace contra "before" e "after" em paralelo, mede tudo. Demora proporcional ao tamanho do trace; 1000 queries ~30s, 100k queries ~5min.
- 6
Leia o diff de 5 dimensões
Step 5. Cards lado-a-lado com antes/depois + delta %: RU consumido total, avg/p95 latência (ms), throttles 429 count, plan-cache hit rate, USD mensal projetado. Cada per-query shape também mostra impacto individual ranqueado por RU. Verdict no topo: APPROVE / WARN / REJECT com rationale textual.
- 7
Exporte o relatório
Botão "Export JSON" salva o report completo (planId, mutations, summary, per-query). Use pra: • Documentar a decisão em ticket de change management • Compartilhar com finance se há economy de custo • Audit trail para compliance (SOC 2 / ISO 27001)
- 8
Aplique em prod (depois de aprovar)
NoSqlStudio não aplica automaticamente — você sai do WHAT-IF Lab, abre a workspace correspondente (Index Policy Editor, Throughput Optimizer, etc) e aplica manualmente. A separação é intencional: WHAT-IF é decisão; aplicação é ação.
Real use cases
Caso A — economia de R$ 4.8k/mês confirmada
DBA suspeita que adicionar composite index `{tenantId, createdAt}` no `app.orders` economizaria RU. Roda WHAT-IF com `add-index`. Result: RU -47% (-200k RU/mo), latência -12ms p99, USD bill -R$ 4.847/mo. APPROVE com confidence 96%. Audit JSON exportado. Aplicado em prod no dia seguinte.
Caso B — change rejected antes de causar incident
Time de plataforma propõe mudar partition key de `userId` pra `region` no `app.events` (parecia mais "uniforme"). WHAT-IF: RU +112%, 0 → 843 throttles na janela, p99 latência +180ms. REJECT. Engenheiro economiza um midnight call pra recovery.
Caso C — autoscale vs manual decision
CFO pergunta se a app pode migrar pra autoscale. DBA roda WHAT-IF com `mode: autoscale, autoscaleMaxRu: 8000` contra os últimos 30 dias. Result: -R$ 1.2k/mês na conta com idênticas latência/throttle. APPROVE.
Caso D — consistency relaxation simulada
Engineering quer baixar de Strong pra Session consistency pra melhorar latência. DBA roda WHAT-IF + apresenta pra compliance: RU -22%, p99 -41ms, semantics docs anexados. Compliance assina off com base no relatório.
FAQ
Quanto custa rodar uma sessão de WHAT-IF?
Modo preview = $0 (sandbox sintético com heurísticas). Modo real = custo de provisionar uma Cosmos account temporária via PITR — tipicamente $5–$20/hora dependendo do tier do source. NoSqlStudio destrói a sandbox automaticamente ao fechar o workspace.
A acurácia do modo preview é confiável?
Modo preview entrega 70-90% de acurácia em mudanças "atômicas" (drop um índice, add um índice simples, mudar consistency). Para mudanças combinadas (partition key + throughput + index) recomendamos validar com modo real antes de aplicar em prod.
Posso capturar mais de 72h de tráfego?
Sim — em vez do ring buffer in-app (limite ~500 queries), aponte pra Azure Log Analytics: o `MongoRequests` table acumula 30+ dias. Configure o workspace URL no Cosmos Optimizer → Diagnostic Logs (KQL templates).
O Microsoft tem algo equivalente?
Não. Azure Cosmos DB Insights mostra métricas retrospectivas mas não simula mudanças. Atlas Performance Advisor sugere índices mas não roda WHAT-IF contra workload real. Ferramentas third-party (Studio 3T, DataGrip, etc) não cobrem nada disso.
WHAT-IF respeita meu nível de isolation?
Sim. O replay engine é stateless e nunca toca prod — só lê dados via in-app log ou Log Analytics. A sandbox é totalmente isolada via PITR account. Nenhuma query do replay afeta sua conta de produção.
Como integro com compliance / SOC 2?
Cada execução gera um JSON imutável com timestamp, planId, mutations applied, summary, per-query results. Salve em audit log + assine com Ed25519 (use o Compliance Reports workspace).