Pular para o conteúdo
← Voltar ao overview do Cosmos DB
Azure Cosmos DB
ÚNICO — só no NoSqlStudio
Ctrl+Alt+Shift+I

WHAT-IF Lab — teste cada mudança contra tráfego real

Capture a última hora (ou últimas 72h) de tráfego real de produção, clone seu dataset Cosmos para uma sandbox via PITR, aplique uma mudança hipotética (drop/add index, mudar partition key, trocar consistency level, mudar modo 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.

Onde ele fica no app: Tools → Cosmos DB → WHAT-IF Lab

O que ele faz

  • Captura tráfego real do app via Query Cost Inspector (in-app) ou Azure Log Analytics (tabela MongoRequests).
  • Provisiona sandbox Cosmos via PITR (continuous backup 7d/30d) — isolado, sem impacto na prod.
  • Aceita até 5 mutações simultâneas: add/drop index, mudar partition key, consistency level, modo de cobrança, throughput por collection.
  • Replay do trace capturado contra prod + sandbox em paralelo (rate-controlled).
  • Diff side-by-side em 5 dimensões: consumo de RU, latência avg + p95, contagem de throttle 429, taxa de hit do query plan cache, conta mensal em dólares.
  • Veredito automático (approve / warn / reject) com rationale textual + export JSON para audit/compliance.
  • Modo "preview" com sandbox sintético: roda em 30 segundos sem custo Azure (ideal para exploração).
  • Modo "real": sandbox PITR de verdade, para confirmação final antes da prod.

Passo a passo

  1. 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. 2

    Capture o tráfego

    Defina a janela em minutos (60 default — ajuste para 1440 = 24h ou 4320 = 72h para capturar ciclos semanais). Clica "Capture now". 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 de RU consumido, namespaces tocados.

    window=60 → captura 1h de tráfego
    window=1440 → captura 24h
    window=4320 → captura 72h (ciclo semanal completo)
  3. 3

    Provisione uma sandbox

    Step 2 do wizard. Coloque 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 para primeiras explorações) — modo "real" provisiona conta Cosmos nova via PITR (~30 min de criação, custo Azure normal de provisioning).

    modo preview → sandbox sintético, sem custo Azure, resultado em 30s
    modo real → PITR sandbox real, ~30min, custo Azure normal
  4. 4

    Configure mutações WHAT-IF

    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. 5

    Quick Estimate ou Full Replay

    Quick Estimate = resposta em ~5 segundos baseada em heurísticas + valores observados durante o capture. Bom para 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. 6

    Leia o diff de 5 dimensões

    Step 5. Cards lado-a-lado com antes/depois + delta %: RU total consumido, latência avg/p95 (ms), contagem de throttles 429, taxa de hit do plan-cache, USD mensal projetado. Cada per-query shape também mostra impacto individual ranqueado por RU. Veredito no topo: APPROVE / WARN / REJECT com rationale textual.

  7. 7

    Exporte o relatório

    Botão "Export JSON" salva o relatório completo (planId, mutations, summary, per-query). Use para: • Documentar a decisão em ticket de change management • Compartilhar com finance se há economia de custo • Audit trail para compliance (SOC 2 / ISO 27001)

  8. 8

    Aplique em prod (depois de aprovar)

    NoSqlStudio não aplica automaticamente — você sai do WHAT-IF Lab, abre o workspace correspondente (Index Policy Editor, Throughput Optimizer, etc) e aplica manualmente. A separação é intencional: WHAT-IF é decisão; aplicação é ação.

Casos de uso reais

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`. Resultado: RU -47% (-200k RU/mo), latência -12ms p99, conta USD -R$ 4.847/mo. APPROVE com confiança de 96%. Audit JSON exportado. Aplicado em prod no dia seguinte.

Caso B — mudança rejeitada antes de causar incidente

Time de plataforma propõe mudar partition key de `userId` para `region` no `app.events` (parecia mais "uniforme"). WHAT-IF: RU +112%, 0 → 843 throttles na janela, latência p99 +180ms. REJECT. Engenheiro economiza um midnight call para recovery.

Caso C — decisão autoscale vs manual

CFO pergunta se a app pode migrar para autoscale. DBA roda WHAT-IF com `mode: autoscale, autoscaleMaxRu: 8000` contra os últimos 30 dias. Resultado: -R$ 1.2k/mês na conta com latência/throttle idênticos. APPROVE.

Caso D — relaxamento de consistency simulado

Engineering quer baixar de Strong para Session consistency para melhorar latência. DBA roda WHAT-IF + apresenta para compliance: RU -22%, p99 -41ms, docs de semantics 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 conta Cosmos 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 para Azure Log Analytics: a tabela `MongoRequests` acumula 30+ dias. Configure a workspace URL no Cosmos Optimizer → Diagnostic Logs (KQL templates).

A 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 log in-app ou Log Analytics. A sandbox é totalmente isolada via conta PITR. 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 no audit log + assine com Ed25519 (use o workspace Compliance Reports).

Pronto para ver isso na sua conta Cosmos?Baixar NoSqlStudioPróximo → RU Budget Dashboard