Pular para o conteúdo
Documentação

Manual de Testes — Query Regressions

Um guia passo a passo para abrir, usar e validar o Query Regressions — o detector de regressões de desempenho baseado em fingerprint estável — no MongoDB, no Cosmos DB e no DocumentDB.

Tempo estimado: ~25 minutos
Neste manual

Introdução

Um guia passo a passo para ajudar você a abrir, usar e validar a tela Query Regressions — o detector de regressões de desempenho e anomalias integrado ao NoSqlStudio. Siga do Passo 1 até o fim, em ordem. Cada passo informa o que fazer e o que você verá.

Como ler este manual

Cada passo tem:

  • Faça — a ação exata (clicar, digitar, executar tal e tal comando).
  • Veja — o que deve acontecer na tela. Este é o seu “passou / falhou”.
  • Por quê — contexto adicional, apenas quando ajuda (pule se estiver com pressa).

O que é o Query Regressions

Conceito

Um fingerprint estável, como o sql_id do Oracle

Cada formato de consulta recebe um fingerprint estável que nunca muda entre execuções — a mesma ideia do sql_id do Oracle. O NoSqlStudio aprende um baseline móvel para cada fingerprint e dispara um alerta quando a mesma consulta começa a custar mais: tempo de relógio (wall-clock) mais lento, mais documentos examinados, mais RU ou um plano pior (por exemplo IXSCAN → COLLSCAN).

Conceito

Uma tela, três engines

A mesma tela funciona no MongoDB, no Azure Cosmos DB (Mongo API) e no AWS DocumentDB. A captura é abrangente a toda a instância — ela enxerga consultas lentas de todos os clientes e todos os bancos de dados, não apenas os que você executa pelo NoSqlStudio. É isso que captura uma mudança não declarada durante uma janela de manutenção.

Conceito

Cinco níveis de análise de causa raiz

Cada alerta é explicado em camadas: L1 métricas antes/depois · L2 o diff do plano · L3 investigadores (índices, estatísticas de coleção, cardinalidade) · L4 eventos de DDL/deploy correlacionados em uma janela de ±5 min (“o que mudou logo antes de isto ficar lento”) · L5 uma narrativa de IA.

Antes de começar

Você pode explorar toda a interface com dados de demonstração e sem nenhum banco de dados (Etapas 1–3). A captura ao vivo (Etapas 4–6) precisa de uma conexão, e a fonte de dados depende do engine:

  1. 1MongoDB — lê o log de consultas lentas do servidor via getLog:'global'. Funciona em replica sets auto-hospedados e em clusters dedicados do Atlas. Não está disponível nos tiers compartilhados do Atlas (M0/M2/M5), que bloqueiam o getLog.
  2. 2Cosmos DB — lê logs de diagnóstico do Azure Log Analytics. Requer o Log Analytics configurado em Cloud Credentials (Cosmos Optimizer).
  3. 3DocumentDB — lê o stream do profiler do DocDB a partir do Amazon CloudWatch Logs. Requer o profiler habilitado no parameter group do cluster, exportado para o CloudWatch, e credenciais AWS definidas em Cloud Credentials.
  4. 4Uma segunda aba onde você possa executar comandos de shell — o Scratchpad ou o Mongo Shell — para gerar consultas lentas.

Tempo estimado para o passo a passo completo: ~25 minutos.

Etapa 1

Abrir a tela (nenhum banco de dados necessário)

Abra a tela e carregue a demonstração integrada para aprender o layout antes de conectar uma fonte ao vivo.

Passo 1

Abrir o Query Regressions

Faça

Na barra de ferramentas, escolha Monitoring ▼ → Query Regressions (atalho de teclado Ctrl+Alt+Shift+Q).

Veja

Uma nova aba abre com o cabeçalho Query Regressions à esquerda, uma lista mestre e um painel de detalhes à direita.

Passo 2

Carregar os dados de demonstração

Faça

Se a lista estiver vazia, clique em Load demo data no estado vazio.

Veja

Dois alertas de exemplo aparecem sob um grupo SHOP: uma Plan regression — shop.orders e um Selectivity collapse — shop.events. O cabeçalho mostra um badge vermelho 2 CRITICAL.

Por quê

A demonstração roda inteiramente em memória — sem servidor, sem permissões. É a forma mais rápida de aprender o que cada seção de um card significa.

Passo 3

Selecionar um alerta

Faça

Clique no card Plan regression — shop.orders na lista.

Veja

O painel de detalhes é preenchido. O cabeçalho mostra um badge CRIT, o título e, abaixo dele, o fingerprint (um hash estável), o namespace e a contagem de ocorrências.

Etapa 2

Anatomia de um alerta

Leia cada seção do painel de detalhes de cima para baixo — este é o mesmo layout para todos os engines.

Passo 4

WHAT CHANGED (Nível 1)

Veja

Uma tabela com Signal · Baseline · Now · Δ. Para MongoDB/DocumentDB a métrica é a duração p95 (ms); para o Cosmos é a RU. Uma segunda linha mostra docs examinados / retornados. As colunas “Now” e “Δ” ficam destacadas quando houve regressão (por exemplo 2.6 → 197 = 75.8×).

Por quê

Esta é a manchete: a mesma consulta agora é muito mais cara do que o seu próprio baseline aprendido.

Passo 5

HOW IT CHANGED — o diff do plano (Nível 2)

Veja

O plano antes/depois, por exemplo IXSCAN { userId:1, status:1 } COLLSCAN. Um índice removido ou uma entrada ruim no plan-cache aparece aqui imediatamente.

Passo 6

WHY — causa raiz (Nível 3)

Veja

Achados em tópicos vindos dos investigadores: quais índices existem na coleção, se o plano mudou, se a chave do plan-cache mudou. Cada tópico é colorido de verde (ok) ou âmbar (suspeito).

Passo 7

WHAT CHANGED NEARBY (Nível 4)

Veja

Uma linha do tempo de eventos de DDL e deploy dentro de ±5 minutos da detecção — por exemplo 2m before · dropIndex · shop.orders · idx_user_status.

Por quê

Esta é a resposta para “o que mudou logo antes de isto ficar lento”. Um índice removido dois minutos antes de uma virada de plano para COLLSCAN é uma causa raiz quase certa.

Passo 8

QUERY SHAPE e AI Root Cause (Nível 5)

Veja

O formato canônico (op, campos de filter, campos de sort), seguido de um painel AI Analysis com um seletor de modelo e um botão Run analysis.

Faça

Clique em Run analysis.

Veja

O botão brilha enquanto o modelo trabalha e, em seguida, surge uma narrativa concisa de causa raiz + remediação, escrita a partir da ficha de fatos deste alerta.

Passo 9

Abrir o modal de detalhes

Faça

Clique no botão ··· no canto superior direito do painel de detalhes.

Veja

Um modal abre com um cabeçalho fixo (severidade + título + fingerprint) e um corpo rolável: o comando realmente executado, um botão Explain plan e uma seção de IA.

Conceito

O Command é o comando real capturado da fonte de consultas lentas — não uma reconstrução — então o Explain executa o formato real da consulta.

Passo 10

Remediação sugerida

Veja

Na parte inferior: Clear plan cache (habilitado para alertas de mudança de plano no MongoDB), Acknowledge e Snooze 24h.

Faça

Clique em Acknowledge, depois em Snooze 24h, e observe o status do alerta mudar na lista.

Atenção

Clear plan cache grava no servidor ao vivo. Ele sempre pede confirmação primeiro — leia o diálogo antes de confirmar, especialmente em produção.

Etapa 3

Escopo e a proteção contra mudanças não declaradas

Passo 11

Alternar o escopo

Faça

Na barra SCOPE, clique em um chip de banco de dados (ou em All databases).

Veja

A lista é filtrada para os bancos de dados selecionados. All databases é o padrão e é o que você quer durante uma janela de manutenção.

Por quê

A detecção sempre roda abrangendo toda a instância. O escopo apenas filtra o que você — ele nunca impede o engine de observar todos os bancos de dados.

Passo 12

O banner de crítico fora do escopo

Veja

Se você restringir o escopo e uma regressão crítica disparar em um banco de dados fora do seu filtro, um banner de aviso aparece: “N critical regression(s) in databases outside your filter”.

Por quê

Esta é a proteção contra o incidente clássico: uma mudança diz que toca o banco de dados X, mas um script oculto altera um banco de dados Y não declarado. O banner traz o Y à tona mesmo quando você não estava olhando para ele.

Etapa 4

Captura ao vivo no MongoDB

Agora conecte uma fonte real. O MongoDB não precisa de configuração de credencial — ele lê o log de consultas lentas do servidor diretamente.

Passo 13

Conectar um replica set ou cluster dedicado do Atlas

Faça

Conecte o NoSqlStudio a um replica set MongoDB ou a um cluster dedicado do Atlas, depois abra o Query Regressions nessa conexão.

Veja

O cabeçalho mostra o status ao vivo como live (verde).

Atenção

Os tiers compartilhados do Atlas (M0/M2/M5) bloqueiam o comando administrativo getLog, então o status ao vivo aparecerá como unavailable. Use um cluster dedicado ou um replica set auto-hospedado.

Passo 14

Gerar um scan obviamente ruim

Faça

Em uma aba de shell, execute um scan lento de coleção em um campo que não tem índice — ordenar por um campo sem índice força um COLLSCAN sobre toda a coleção:

js·2 linhas
use <database>
db.<collection>.find({}).sort({ <unindexedField>: -1 }).limit(25).toArray()
Veja

A consulta leva bem mais de 100 ms e varre toda a coleção.

Passo 15

Ver o card New slow query

Faça

Volte para a aba Query Regressions e aguarde alguns segundos (o log de lentidão é consultado a cada ~5 s).

Veja

Um card WARN intitulado New slow query — <namespace> (código Q7) aparece, com plano COLLSCAN e uma alta contagem de docs examinados.

Por quê

Uma consulta nunca antes vista que já é um grande COLLSCAN é sinalizada na primeira aparição — sem necessidade de baseline. Esta é a proteção para mudanças que entram durante uma janela de manutenção.

Passo 16

Provar que o fingerprint é estável (dedup)

Faça

Execute a mesma consulta exata mais algumas vezes.

Veja

Nenhum card novo aparece. As repetições são agrupadas no mesmo alerta — mesmo fingerprint = mesma identidade.

Por quê

Este é todo o objetivo do fingerprint estável: reexecutar uma consulta nunca enche de alertas duplicados. Uma consulta = uma identidade, como o sql_id.

Passo 17

Provar que um formato diferente é um novo alerta

Faça

Execute um COLLSCAN com um formato diferente — ordene por um campo sem índice diferente:

js·2 linhas
use <database>
db.<collection>.find({}).sort({ <anotherUnindexedField>: -1 }).limit(25).toArray()
Veja

Um segundo card, distinto, aparece com um fingerprint diferente. Formato diferente = nova identidade = novo alerta.

Etapa 5

Captura ao vivo no Cosmos DB (modo RU)

O Cosmos não tem log de consultas lentas para consultar, então a captura lê os logs de diagnóstico do Azure Log Analytics. A métrica é RU, não milissegundos.

Passo 18

Configurar o Log Analytics em Cloud Credentials

Faça

Em uma conexão Cosmos DB (Mongo API), abra o Cosmos Optimizer (Ctrl+Alt+Shift+O) → Configuration → Cloud Credentials e preencha a seção Azure: o Resource ID da conta Cosmos e o Log Analytics workspace ID. Clique em Save.

Veja

Uma confirmação verde aparece (credentials saved … MetricsBridge promoted).

Atenção

O Log Analytics é um tier pago (ingestão + retenção). É o único caminho que enxerga consultas de outros clientes — o caminho gratuito de header só enxerga o que o próprio NoSqlStudio executa, o que não é suficiente para o cenário de mudança não declarada.

Passo 19

Confirmar o status ao vivo e gerar uma consulta cara

Faça

Abra o Query Regressions na conexão Cosmos; confirme que o status aparece como live. Em seguida execute uma consulta cross-partition ou sem índice que consuma RU.

Veja

Depois que o Log Analytics ingerir a linha (minutos de atraso), um card aparece com a RU antes/depois como a métrica de manchete.

Conceito

O Explain não está disponível no modo RU do Cosmos — o modal informa isso e o direciona para a métrica de RU e para o painel de Index Policy em vez disso.

Etapa 6

Captura ao vivo no DocumentDB

O DocumentDB não suporta getLog, então a captura lê o stream do profiler do DocDB a partir do CloudWatch Logs. Ele precisa do profiler habilitado e de credenciais AWS.

Passo 20

Habilitar o profiler do DocDB

Faça

Na AWS, crie um parameter group de cluster personalizado com profiler = enabled e um profiler_threshold_ms baixo (por exemplo 50), aplique-o (um reboot é necessário) e adicione profiler aos Log exports to CloudWatch do cluster.

Veja

Operações lentas começam a chegar no grupo de logs do CloudWatch /aws/docdb/<cluster>/profiler.

Passo 21

Definir as credenciais AWS em Cloud Credentials

Faça

Na conexão DocumentDB, abra o Cosmos Optimizer (Ctrl+Alt+Shift+O) → Configuration → Cloud Credentials e preencha a seção AWS DocumentDB: Region, DocDB cluster identifier e, opcionalmente, um AWS profile (deixe vazio para usar a cadeia de credenciais padrão da máquina). Role para baixo e clique em Save credentials.

Veja

A seção exibe um badge verde CONFIGURED, e o MetricsBridge aws-documentdb é registrado para esta conexão.

Conceito

Este painel é compartilhado entre AWS DocumentDB e Azure Cosmos e é por conexão — preencha a seção AWS na conexão DocumentDB, a seção Azure em uma conexão Cosmos. Cada conexão carrega sua própria region/cluster, então múltiplos clusters DocDB em regiões diferentes são tratados de forma independente.

Passo 22

Abrir a tela e gerar um scan lento

Faça

Abra o Query Regressions na conexão DocumentDB (confirme o status live), depois execute um COLLSCAN lento em uma aba de shell:

js·2 linhas
use <database>
db.<collection>.find({}).sort({ <unindexedField>: -1 }).limit(25).toArray()
Veja

Em ~15 s um card New slow query aparece, com plano COLLSCAN e uma contagem de docs examinados derivada.

Atenção

O DocumentDB não emite docsExamined diretamente, então o valor é derivado do estágio de scan do execStats do profiler — exato para scans sem filtro, um limite inferior quando um filtro de estágio exclui linhas. Uma contagem eficiente somente por índice (IXONLYSCAN) intencionalmente não é sinalizada, mesmo que seja um pouco lenta — apenas COLLSCANs que examinam muitos docs são.

Etapa 7

Persistência e comportamentos

Passo 23

O status sobrevive a uma reabertura

Faça

Faça acknowledge ou snooze em um alerta, depois feche e reabra a aba Query Regressions.

Veja

O status de acknowledged/snoozed e a sua seleção de escopo ainda estão lá.

Passo 24

A mesma tela, todos os engines

Veja

Abra a tela em uma conexão MongoDB, uma Cosmos e uma DocumentDB, uma de cada vez. O layout, os cards, os cinco níveis de RCA e o painel de IA são idênticos — apenas a métrica de manchete (ms vs RU) e a disponibilidade do Explain diferem.

Limpeza (quando você terminar)

Faça

Remova quaisquer coleções de teste descartáveis que você criou:

js·2 linhas
use <database>
db.<collection>.drop()
Faça

Para o DocumentDB, se o profiler foi habilitado apenas para este teste, você pode desabilitá-lo no parameter group e excluir o grupo de logs do CloudWatch para parar os custos de ingestão. Para o Cosmos, reduza ou desabilite as diagnostic settings do Log Analytics se você não precisar de captura contínua.

Veja

Os dados de teste sumiram e quaisquer tiers pagos da nuvem que você habilitou para o teste estão desativados.

Resumo do que você validou

EtapaRecurso
1Abrir o Query Regressions e carregar dados de demonstração sem nenhum banco de dados
2Ler um alerta: métricas L1, diff de plano L2, achados L3, eventos próximos L4, IA L5, modal de detalhes, remediação
3Filtro de escopo e o banner de crítico fora do escopo (proteção contra mudanças não declaradas)
4Captura ao vivo no MongoDB: New slow query, dedup por fingerprint estável, novo formato = novo alerta
5Captura ao vivo no Cosmos DB via Log Analytics, com RU como métrica
6Captura ao vivo no DocumentDB via o stream do profiler do CloudWatch
7Persistência de status/escopo e uma tela consistente nos três engines
Se cada passo apresentou o “Veja” esperado, o Query Regressions está 100% validado no MongoDB, no Cosmos DB e no DocumentDB. Anote o número do passo de qualquer discrepância para que possamos corrigi-la.