Definição
Aviso
O estágio de agregação $queryStats não é suportado e não é garantido que seja estável em uma versão futura. Não crie uma funcionalidade que dependa de um formato de saída específico desse estágio, pois a saída pode mudar em uma versão futura.
Retorna estatísticas de tempo de execução para query registradas.
$queryStats coleta e relata métricas para query aggregate(), find(), distinct(), count(), update(), insert(), deleteOne() e deleteMany(). $queryStats não coleta informações para query que usam Queryable Encryption.
Requisitos
The $queryStats stage is enabled on deployments hosted on MongoDB Atlas with a cluster tier of at least M10.
Para executar o estágio $queryStats , seu pipeline deve atender aos seguintes requisitos:
O pipeline deve ser executado no banco de dados
admin.$queryStatsdeve ser o primeiro estágio do pipeline.
Sintaxe
db.adminCommand( { aggregate: 1, pipeline: [ { $queryStats: { transformIdentifiers: { algorithm: <string>, hmacKey: <binData> /* subtype 8 - used for sensitive data */ } } } ], cursor: { } } )
Importante
Você não pode executar $queryStats em uma collection específica. Para obter exemplos completos, consulte Exemplos.
Campos de comando
$queryStats usa os seguintes campos:
Campo | necessidade | Tipo | Descrição |
|---|---|---|---|
| Opcional | Documento | Especifica opções de transformação adicionais para a saída |
| Obrigatório ao especificar o objeto | String | O tipo de transformação de hash aplicada às informações de namespace e nomes de campo na saída. O único valor |
| Obrigatório ao especificar o objeto | BinData | A entrada de chave privada na transformação HMAC. |
Controle de acesso
Se a sua implementação impuser controle de acesso, o usuário executando o $queryStats deverá ter as seguintes permissões:
Para executar o
$queryStatssem a opçãotransformIdentifiers, o usuário deve ter a ação de privilégioqueryStatsRead.Para executar o
$queryStatscom a opçãotransformIdentifiers, o usuário deve ter as ações de privilégio doqueryStatsReadequeryStatsReadTransformed.
O role clusterMonitor integrado fornece os privilégios queryStatsRead e queryStatsReadTransformed . O exemplo a seguir concede a função clusterMonitor no reconhecimento de data center admin :
db.grantRolesToUser( "<user>", [ { role: "clusterMonitor", db: "admin" } ] )
Comportamento
As seções a seguir descrevem detalhes comportamentais do estágio $queryStats .
Como $queryStats rastreia estatísticas de query
As estatísticas do estágio $queryStats são rastreadas em uma collection virtual armazenada na memória. O limite de memória para a collection virtual é de 1% da memória total do sistema.
Como o $queryStats amostra operações
Novidades na versão 9.0.
A partir do MongoDB 9.0, o $queryStats coleta estatísticas para uma amostra de 1% das operações de leitura e gravar por padrão. Para alterar a taxa de amostragem, defina o parâmetro internalQueryStatsSampleRate para operações de leitura ou o parâmetro internalQueryStatsWriteCmdSampleRate para operações de gravação. Ambos os parâmetros aceitam um valor entre 0.0 e 1.0.
Como $queryStats relata apenas as operações que o MongoDB amostra, sua saída representa um subconjunto das operações executar em sua implantação. As contagens e os tempos de execução refletem apenas as operação amostra.
Como os Grupos $queryStats Retornaram documento
$queryStats agrupa queries com propriedades comuns no mesmo documento de saída. O documento resultante é chamado de entrada de estatísticas de query.
$queryStats agrupa query semelhantes normalizando valores de campo fornecidos pelo usuário para seus tipos de dados. Por exemplo, um filtro especificado como { item: 'card' } é normalizado para { item : '?string'}. $queryStats também normaliza os valores de algumas opções de query, como hint e comment.
$queryStats preserva valores literais para opções como readConcern e readPreference.
Para obter a lista completa de opções incluídas em uma entrada de estatísticas de query, consulte localizar a forma de query do comando.
Como $queryStats transforma dados usando transformIdentifiers
Quando uma chave HMAC é especificada para a opção transformIdentifiers , o $queryStats utiliza a chave HMAC para aplicar uma função de hash HMAC-SHA-256 nos seguintes dados:
Nomes dos campos do documento
Nomes de coleção
nomes de banco de dados
$queryStats não aplica a transformação HMAC aos seguintes dados:
Palavras-chave MQL, como nomes de operadores (por exemplo,
$gte).Nomes de parâmetros como o parâmetro
partitionByem$setWindowFields.Valores do campo.
$queryStatsnormaliza os valores de campo em uma query para seus tipos de dados (como número ou string) quando a query é registrada.$queryStatsnunca armazena valores de campo que contêm dados do usuário.
Para obter um exemplo de saída transformada, consulte Exemplo transformado.
$queryStats Log Entries
MongoDB records $queryStats operations in the deployment logs. By default, MongoDB only logs the invocation of $queryStats operations, not the operation's output. For $queryStats operations that include the transformIdentifiers option, you can specify whether the transformed output is included in the log entry.
Para saber como controlar o comportamento de registro do $queryStats , consulte Alternar saída de registro do $queryStats.
Fluxos de alterações
As estatísticas de query para change streams são atualizadas quando ocorre um desses eventos:
Um cursor é criado
Uma operação
getMoreé concluídaUm cursor fecha
As estatísticas de query relatadas para change streams têm estes comportamentos:
Métricas de execução como
totalExecMicroscontêm informações para a operação mais recente (criação do cursor,getMoreou fechamento do cursor).As operações
getMoreinternas incrementam a métricaexecCount.firstResponseExecMicrosetotalExecMicrossão sempre os mesmos porque as estatísticas são coletadas e atualizadas para cada operaçãogetMore.Quando o cursor fecha,
lastExecutionMicrosé 0.
Comportamento de cluster fragmentado
Novidades na versão 8.3.
Em clusters fragmentados, o MongoDB registra as estatísticas de query separadamente em cada mongod e mongos quando $queryStats está ativado. Os servidores de fragmento também registram estatísticas para queries originadas de mongos. Eles fornecem métricas em nível de fragmento mais completas para queries que os usuários roteiam por mongos.
Saída
$queryStats retorna uma matriz de entradas de estatísticas de consulta. Algumas propriedades de entrada de estatísticas de query contêm valores literais e algumas propriedades são normalizadas para agrupar queries comuns.
Observação
O MongoDB 9.0 atualizar a estrutura de saída $queryStats para melhorar a organização das métricas.
As entradas de estatísticas de query contêm os seguintes documentos de nível superior:
Documento | Descrição |
|---|---|
| A combinação exclusiva de atributos que definem uma entrada na saída de estatísticas de query. O
Cada combinação única de atributos cria uma entrada separada na collection virtual do |
| A hora UTC em que |
| Contém métricas agregadas de tempo de execução associadas a cada entrada de estatísticas de query. Cada entrada de estatísticas de query registra estatísticas para cada query que compartilha a mesma chave. |
Cada documento na array de saída contém os seguintes campos:
Campo | Tipo | Literal ou Normalizado | Descrição |
|---|---|---|---|
| Documento | literal | Contém a forma de query e atributos de query adicionais que agrupam um conjunto de queries |
| Documento | literal | Contains attributes used to group similar queries together. For more information, see Query Shape. |
| Documento | literal | Descreve as informações do cliente associadas à chave |
| Documento | literal | O nome do aplicativo cliente |
| Documento | literal | Descreve o driver usado para emitir a query |
| String | literal | Nome do driver usado para emitir a query. Os valores possíveis incluem |
| String | literal | Número da versão do driver usado para emitir a query |
| Documento | literal | Descreve o sistema operacional usado pelo cliente que emitiu a query |
| String | literal | Tipo do sistema operacional |
| String | literal | Nome do sistema operacional |
| String | literal | Arquitetura do sistema operacional. Os valores possíveis incluem |
| String | literal | Número da versão do sistema operacional |
| Documento | literal | A referência de leitura para a chave |
| String | literal | The type of collection the query was issued on. For more information, see Collection Type. |
| Documento ou string | Normalizado | O índice que foi usado como dica para a query |
| String | Normalizado | O tamanho do lote da chave. O tamanho do lote especifica o número máximo de documentos que podem ser devolvidos em cada lote de um resultado de query. Por padrão, o tamanho do lote inicial é o menor de |
| String | Normalizado | Comentário associado à chave |
| String | Normalizado | valor maxTimeMS associado à chave |
| Boolean | Normalizado | Opção noCursorTimeout associada à chave |
| String | literal | preferência de leitura associada à chave |
| String | literal | A versão da Stable API associada à chave. Consulte MongoDB Stable API para atualizações de servidor. |
| Boolean | literal | O valor do parâmetro |
| Boolean | literal | O valor do parâmetro |
| String | literal | Uma representação em hash dos valores no |
| String | literal | Novidades na versão 8.0.
|
| Documento | literal | Descreve estatísticas de tempo de execução para a chave |
| Documento | literal | Novidades na versão 9.0. Métricas relacionadas ao cursor e ao protocolo de lote |
| Documento | literal | Alterado na versão 9.0. Descreve o tempo gasto desde o início do processamento de uma query na chave até quando o servidor retorna o primeiro lote de resultados Todos os subcampos de |
| Documento | literal | Novidades na versão 9.0. Métricas relacionadas à execução de query |
| Documento | literal | Alterado na versão 9.0. Descreve o número de documento retornados por query dentro da chave |
| Número longo | literal | Número total de documento retornados por query com a chave fornecida |
| Número longo | literal | Número máximo de documentos retornados por uma query com a chave fornecida |
| Número longo | literal | Menor número de documentos retornados por uma query com a chave fornecida |
| NumberDecimal | literal | Soma dos quadrados do número de documentos retornados por uma query dentro da chave. Um valor alto de |
| Documento | literal | Descreve o número de chaves examinadas por queries |
| Inteiro | literal | Número total de chaves examinadas |
| Número longo | literal | Número máximo de chaves examinadas |
| Número longo | literal | Menor número de chaves examinadas |
| NumberDecimal | literal | Soma dos quadrados do número de chaves examinadas. Um valor |
| Documento | literal | Alterado na versão 9.0. Descreve o número de documentos examinados por queries |
| Inteiro | literal | Número total de documentos examinados na query |
| Número longo | literal | Número máximo de documentos examinados |
| Número longo | literal | Número mínimo de documentos examinados |
| NumberDecimal | literal | Soma de quadrados do número de documentos examinados. Um valor |
| Documento | literal | Alterado na versão 9.0. Descreve o número de bytes lidos por query |
| Inteiro | literal | Número total de bytes lidos na query |
| Número longo | literal | Número máximo de bytes lidos |
| Número longo | literal | Número mínimo de bytes lidos |
| NumberDecimal | literal | Soma dos quadrados do número de bytes lidos |
| Documento | literal | Alterado na versão 9.0. Descreve o tempo de leitura da query em microssegundos |
| Inteiro | literal | Tempo total de leitura da query em microssegundos |
| Número longo | literal | Tempo máximo de leitura da query em microssegundos |
| Número longo | literal | Tempo mínimo de leitura da query em microssegundos |
| NumberDecimal | literal | Soma dos quadrados do tempo de leitura da query em microssegundos |
| Número longo | literal | Alterado na versão 9.0. Número de vezes que as operações de query excederam o tempo esperado de aquisição do ticket de execução. |
| Número longo | literal | Alterado na versão 9.0. Tempo total em milissegundos em que as operações de query excederam o tempo esperado de aquisição do ticket de execução. |
| Número longo | literal | Alterado na versão 9.0. Maior duração de tempo em milissegundos em que uma operação de query excedeu o tempo esperado de aquisição do ticket de execução. |
| Número longo | literal | Tempo de execução de execução para a query mais recente para todas as queries com a chave fornecida |
| Número longo | literal | Número de vezes que a query com a chave fornecida foi executada |
| Documento | literal | Alterado na versão 9.0. Métricas relacionadas a plano de query |
| Documento | literal | Alterado na versão 9.0. Objeto que contém dois campos:
|
| Documento | literal | Alterado na versão 9.0. Objeto que contém dois campos:
|
| Documento | literal | Alterado na versão 9.0. Objeto que contém dois campos:
|
| Documento | literal | Alterado na versão 9.0. Objeto que contém dois campos:
|
| Documento | literal | Novidades na versão 9.0. Counts of the plan shapes that MongoDB selected for queries with the given key. For details, see Plan Shape Counters. |
| Documento | literal | Novidades na versão 9.0. Contagens das formas gerais dos planos vencedores. Cada plano vencedor corresponde a no máximo um padrão. |
| Documento | literal | Novidades na versão 9.0. Contagens dos tipos de estágios de plano que aparecem nos planos vencedores. Um único plano vencedor pode corresponder a vários contadores de nó. |
| Documento | literal | Novidades na versão 9.0. Contagens dos caminhos de acesso aos dados e limites do índice que os planos vencedores usam. Um único plano vencedor pode corresponder a vários contadores de caminho de acesso. |
| Documento | literal | Alterado na versão 9.0. Métricas relacionadas a gravar |
| Número longo | literal | Novidades na versão 9.0. O número de documentos que um atualizar seleciona |
| Número longo | literal | Novidades na versão 9.0. O número de documentos que uma operação de atualizar insere |
| Número longo | literal | Novidades na versão 9.0. O número de documentos que uma operação de atualização modifica |
| Número longo | literal | Novidades na versão 9.0. O número de documentos que uma operação de exclusão exclui |
| Número longo | literal | Novidades na versão 9.0. O número de documentos que uma operação de inserção insere, excluindo upserts |
| Número longo | literal | Novidades na versão 9.0. O número de atualizar na solicitação de atualizar original |
| Documento | literal | Descreve o tempo total gasto executando query com a chave fornecida. Se a query resultou em Todos os subcampos de |
| Número longo | literal | Tempo total gasto executando query com a chave fornecida |
| Número longo | literal | Maior tempo gasto executando uma query com a chave fornecida |
| Número longo | literal | Menor tempo gasto executando uma query com a chave fornecida |
| NumberDecimal | literal | Soma dos quadrados do tempo total de execução de todas as query com a chave fornecida. Um valor alto de |
| Número longo | literal | Quantidade combinada de tempo gasto desde o início do processamento da query até quando o servidor retorna o primeiro lote de resultados |
| Número longo | literal | Maior tempo gasto desde o início do processamento de query até quando o servidor retorna o primeiro batch de resultados |
| Número longo | literal | O menor tempo gasto desde o início do processamento da query até quando o servidor retorna o primeiro lote de resultados |
| NumberDecimal | literal | Soma dos quadrados do tempo gasto desde o início do processamento da query até quando o servidor retorna o primeiro lote de resultados. Um valor alto de |
| Data | literal | Tempo em que uma query com a chave fornecida foi usada pela primeira vez desde a última reinicialização |
| Data | literal | Hora em que uma query com a chave fornecida foi usada mais recentemente |
| Número longo | literal | O tempo de execução da operação, excluindo pausas intencionais, como tempo de espera em travas e controle de fluxo. |
| Documento | literal | Contém métricas relacionadas a CBR quando é usado durante o planejamento de query. CBR avalia vários planos de query e seleciona o plano mais eficiente com base nos custos estimados. Novidades na versão 8.3.3. |
| Documento | literal | Contém métricas relacionadas ao número de documentos amostrados durante a classificação baseada em custo para queries com a chave fornecida. Novidades na versão 8.3.3. |
| Número longo | literal | Número total de documentos amostrados durante a classificação baseada em custo. Novidades na versão 8.3.3. |
| Número longo | literal | Número máximo de documentos amostrados durante a classificação baseada em custos. Novidades na versão 8.3.3. |
| Número longo | literal | Número mínimo de documentos amostrados durante a classificação baseada em custo. Novidades na versão 8.3.3. |
| NumberDecimal | literal | Soma de quadrados do número de documentos amostrados durante a classificação baseada em custo. Um valor Novidades na versão 8.3.3. |
| Documento | literal | Contém contagens para cada método de estimativa de cardinalidade usado durante a classificação baseada em custo. Cada campo representa o número de vezes que um determinado método de estimativa foi usado. Novidades na versão 8.3.3. |
| Número longo | literal | Número de vezes que a estimativa de cardinalidade baseada em histograma foi usada. Novidades na versão 8.3.3. |
| Número longo | literal | Número de vezes que a estimativa de cardinalidade baseada em amostragem foi usada. Novidades na versão 8.3.3. |
| Número longo | literal | Número de vezes que a estimativa de cardinalidade baseada em heurística foi usada. Novidades na versão 8.3.3. |
| Número longo | literal | Número de vezes que uma abordagem mista para estimativa de cardinalidade foi usada. Novidades na versão 8.3.3. |
| Número longo | literal | Número de vezes que a estimativa de cardinalidade baseada em metadados foi usada. Novidades na versão 8.3.3. |
| Número longo | literal | Número de vezes que a estimativa de cardinalidade baseada em código foi usada. Novidades na versão 8.3.3. |
| Documento | literal | Contém métricas relacionadas ao uso da CPU para uma operação de query. Este documento está disponível apenas em sistemas Linux. Novidades na versão 8.2. |
| Número longo | literal | Tempo total da CPU gasto por uma operação de query em nanossegundos. Este campo está disponível apenas em sistemas Linux. Novidades na versão 8.2. |
| Número longo | literal | Tempo máximo da CPU gasto em uma operação de query em nanossegundos. Este campo está disponível apenas em sistemas Linux. Novidades na versão 8.2. |
| Número longo | literal | Tempo mínimo de CPU gasto em uma operação de query em nanossegundos. Este campo está disponível apenas em sistemas Linux. Novidades na versão 8.2. |
| NumberDecimal | literal | Soma dos quadrados do tempo da CPU gastos em operações de query. Este campo está disponível apenas em sistemas Linux. Um valor Novidades na versão 8.2. |
| Número longo | literal | Soma da memória rastreada de pico local e soma da memória rastreada de pico de todos os shard remotos contatados durante a execução da query. Novidades na versão 9.0. |
| Número longo | literal | Uso máximo de memória rastreada localmente. Novidades na versão 9.0. |
| Documento | literal | Contém métricas relacionadas ao tempo gasto durante o planejamento de query para query com a chave fornecida. Todos os subcampos de Novidades na versão 8.3. |
| Número longo | literal | Tempo total de planejamento da query. Novidades na versão 8.3. |
| Número longo | literal | Tempo máximo de planejamento de query. Novidades na versão 8.3. |
| Número longo | literal | Tempo mínimo de planejamento de query. Novidades na versão 8.3. |
| NumberDecimal | literal | Soma dos quadrados dos tempos de planejamento de query. Um valor Novidades na versão 8.3. |
| Número longo | literal | Número de vezes que uma operação de query chama Novidades na versão 8.3. |
| Número longo | literal | Número máximo de milissegundos em que o sistema atrasou Novidades na versão 8.3. |
Contadores de Formato de Plano
Novidades na versão 9.0.
O documento metrics.queryPlanner.planShapeCounters registra com que frequência o MongoDB selecionou cada formato de plano para queries com a chave fornecida. Use esses contadores para aprender em quais planos de query sua carga de trabalho mais se baseia.
planShapeCounters contém até três subdocumentos, cada um mapeando nomes de contadores para contagens:
Subdocumento | Descrição |
|---|---|
| Conta a forma geral de cada plano vencedor. Os padrões são mutuamente exclusivos, portanto, cada execução de query incrementa no máximo um contador de padrão. |
| Conta os tipos de estágios de plano que aparecem em cada plano vencedor. Os contadores de nó não são mutuamente exclusivos, portanto, uma execução de query pode incrementar vários deles. |
| Conta os caminhos de acesso aos dados e os limites do índice que cada plano vencedor usa. Os contadores de caminho de acesso não são mutuamente exclusivos, portanto, uma execução de query pode incrementar vários deles. |
Cada contador aumenta em no máximo um para cada execução de query, mesmo que o plano use o estágio ou caminho de acesso correspondente muitas vezes. Por exemplo, um plano com 1,000 ramificações sob um estágio $or incrementa o contador de nó $or correspondente em um, não em 1,000. Como resultado, os contadores registram quantas execuções usaram um estágio, não quantas vezes cada execução o usou.
O MongoDB omite contadores com uma contagem de zero e omite subdocumentos que não contêm contadores. Se nenhuma das querys registradas produziu contadores de formato de plano, o MongoDB omite o documento planShapeCounters inteiramente. Por exemplo, uma query que corresponde a um único documento por _id usa um caminho rápido que não corresponde a nenhum formato de plano rastreado, portanto, sua entrada de estatísticas de query não contém nenhum documento planShapeCounters.
O MongoDB registra contadores de formato de plano apenas para a query de nível superior. Por exemplo, o MongoDB não registra contadores para o lado externo de um estágio $lookup.
Contadores de padrão
Cada nome de contador de padrão lista os estágios do plano vencedor em ordem, começando com o estágio do caminho de acesso. Por exemplo, ixscanFetchSort conta os planos vencedores que usam uma verificação de índice, buscam os documentos correspondentes e, em seguida, os classificam.
Pattern names describe plans at a coarse level. They omit limit and skip stages, and they don't distinguish whether a stage applies a filter or which type of projection a plan uses. To determine those details, combine a pattern counter with the nodes counters and the query shape for the entry.
patterns pode conter os seguintes contadores:
Caminho de Acesso | Contadores |
|---|---|
Varredura de collection |
|
Varredura de índice com uma busca |
|
Varredura de índice com um |
|
Varredura de índice sem uma busca imediata |
|
Contadores de nó
O MongoDB registra os contadores de nó depois que ele seleciona o mecanismo de execução de query, assim, os contadores incluem os estágios do plano que representam os estágios de agregação enviados para o mecanismo baseado em slot.
nodes pode conter os seguintes contadores:
Contador | Descrição |
|---|---|
| Estágios de varredura de coleção, contados separadamente com base em se o estágio aplica um filtro. |
| Estágios de varredura de índice, contados separadamente dependendo se o estágio aplica um filtro. |
| Estágios de busca, contados separadamente com base em se o estágio aplica um filtro. |
| Estágios de interseção de índice com hash, contados separadamente com base em se o estágio aplica um filtro. |
| Estágios de interseção de índices classificados. |
|
|
| Estágios de mesclagem de classificação, contados separadamente com base em se o estágio aplica um filtro e se o estágio tem mais de 100 estágios filhos. |
| Estágios que retornam chaves de índice em vez de documentos. |
| Estágios que filtram documentos órfãos em um shard. |
| Estágios de projeção, contados separadamente por tipo de projeção. |
| Estágios que geram chaves de classificação para uma classificação. |
| Estágios de classificação, contados separadamente por tipo de classificação e se a classificação tem um limite. |
| Estágios de limite, contados separadamente pelo valor do limite. |
| Estágios de salto, contados separadamente pelo valor de salto. |
| Estágios que combinam os resultados de uma pesquisa de texto. |
| Estágios de correspondência. |
| Estágios que substituem a raiz de um documento. |
| Estágios de grupo. |
| Estágios de busca de igualdade, contados separadamente com base em se o estágio também desenrola os resultados. |
| Estágios que descompactam buckets de série temporal. |
| Estágios de junção, contados separadamente por algoritmo de junção: junção com hash, junção de loop aninhado, junção de loop aninhado com índice e sondagem de índice. |
Contadores de caminho de acesso
accessPaths pode conter os seguintes contadores:
Contador | Descrição |
|---|---|
| Varredura de coleção, contadas separadamente com base em se a varredura usa o índice clusterizado. |
| Varreduras de índice que não buscam documento. |
| Varreduras de índice que buscam documentos. |
| Scans que contam chaves de índice sem retornar documentos. |
| Varreduras que ignoram chaves de índice duplicadas, contadas separadamente com base em se a varredura busca documentos. |
| |
| Pesquisas de texto que usam um índice de texto. |
| Planos vencedores que não usam uma varredura de coleção, uma varredura de índice, uma varredura de contagem, uma varredura distinta ou um caminho de acesso geoespacial. Um plano que executa apenas uma pesquisa de texto incrementa |
| Scans de índice, contados separadamente por propriedade de índice. Um único scan de índice pode incrementar vários desses contadores. |
| Varreduras de índice, contadas separadamente pelos limites do índice que a varredura usa. O MongoDB incrementa |
| Varreduras de índice onde um campo tem vários limites, contados separadamente pelo número de limites. |
collectionType
O campo key.collectionType indica o tipo de collection em que a query registrada foi emitida. O collectionType pode ser um dos seguintes valores:
Campo | Descrição |
|---|---|
| A query era uma operação de change stream. |
| A query foi emitida em uma collection padrão. |
| A query foi emitida em uma collection que não existe. |
| A query foi emitida em uma coleção de séries temporais. |
| A query foi emitida em uma visualização. |
| A query foi emitida em uma collection virtual. As seguintes operações ocorrem em collections virtuais: |
forma de query
O documento key.queryShape contém campos de forma de query . Para saber mais sobre formas de query, consulte Formas de query.
Os campo em key.queryShape variam com base no comando que resultou na entrada de estatísticas de query. $queryStats cria entradas de estatísticas de query para os comandos aggregate, find, distinct, count, update, insert e delete.
Cada propriedade de forma de query corresponde a uma opção de query. Por exemplo, key.queryShape.sort corresponde à especificação sort() para a forma de query.
encontre a forma de query de comando
A tabela a seguir descreve as propriedades da forma de query para comandos find .
Campo | Tipo | Literal ou Normalizado |
|---|---|---|
| Documento | Normalizado |
| Documento | literal |
| Documento | Normalizado |
| Inteiro | Normalizado |
| Inteiro | Normalizado |
| Boolean | literal |
| Documento | Normalizado |
| Documento | Normalizado |
| Boolean | literal |
| Boolean | literal |
| Boolean | literal |
| Boolean | literal |
| Boolean | literal |
| Documento | literal |
| Boolean | literal |
| Documento | Normalizado |
forma de query de comando agregada
A tabela a seguir descreve as propriedades da forma de query para comandos aggregate .
Campo | Tipo | Literal ou Normalizado |
|---|---|---|
| Array | Normalizado |
| Boolean | literal |
| Boolean | literal |
| Boolean | literal |
| Documento | literal |
| string ou documento | Normalizado |
| Documento | Normalizado |
forma de query de comando distinta
A tabela a seguir descreve as propriedades da forma de query para comandos distinct .
Campo | Tipo | Literal ou Normalizado |
|---|---|---|
| Documento | Normalizado |
| String | literal |
| Documento | Normalizado |
forma de query do comando de contagem
A tabela a seguir descreve as propriedades da forma de query para comandos count .
Campo | Tipo | Literal ou Normalizado |
|---|---|---|
| Documento | Normalizado |
| Documento | Normalizado |
| Inteiro | Normalizado |
| Inteiro | Normalizado |
Forma de query do comando atualizar
Novidades na versão 9.0.
A tabela a seguir descreve as propriedades da forma de query para comandos update. $queryStats acompanha as estatísticas de forma de query para cada declaração de atualizar no array updates, não para o comando update de nível superior como um todo.
Campo | Tipo | Literal ou Normalizado |
|---|---|---|
| Documento | Normalizado |
| documento ou array | Normalizado |
| Documento | Normalizado |
| matriz de documentos | Normalizado |
| Boolean | literal |
| Boolean | literal |
| Documento | Normalizado |
| Documento | literal |
Importante
$queryStats não coleta estatísticas de forma de query para operações update em coleções de séries temporais.
forma de query do comando insert
Novidades na versão 9.0.
A tabela a seguir descreve as propriedades da forma de query para comandos insert. $queryStats acompanha as estatísticas da forma de query uma vez para todo o comando insert, não para cada documento no array documents. O MongoDB sempre normaliza documents para um valor de marcador fixo, independentemente do número ou conteúdo dos documentos inseridos.
Campo | Tipo | Literal ou Normalizado |
|---|---|---|
| Array | Normalizado |
Importante
$queryStats não coleta estatísticas de forma de query para operações insert em coleções de séries temporais.
Forma de query do comando excluir
Novidades na versão 9.0.
A tabela a seguir descreve as propriedades da forma de query para comandos delete. $queryStats acompanha as estatísticas de forma de query para cada declaração excluir no array deletes, não para o comando delete de nível superior como um todo.
key.queryShape.limit reflete o campo limit da declaração de excluir, onde 0 excluir todos os documentos correspondentes e 1 excluir um único documento. Ele não limita o número de entradas de estatísticas de query.
Campo | Tipo | Literal ou Normalizado |
|---|---|---|
| Documento | Normalizado |
| Inteiro | literal |
| Documento | Normalizado |
| Documento | literal |
Importante
$queryStats não coleta estatísticas de forma de query para operações delete em coleções de séries temporais.
Métricas complementares
As entradas de estatísticas de query podem conter um documento metrics.supplementalMetrics que fornece informações adicionais sobre suas queries.
Métricas $vectorSearch
If your query shape contains $vectorSearch, $queryStats outputs the following supplemental metrics:
Campo | Tipo | Descrição |
|---|---|---|
| Documento | Métricas adicionais sobre um estágio de agregação |
| Documento | Métricas relacionadas ao valor |
| Documento | Métricas relacionadas ao valor |
Exemplos
Para executar os exemplos nesta seção, comece com os seguintes dados:
db.products.insertMany( [ { item: "card", qty: 15 }, { item: "envelope", qty: 20 }, { item: "stamps" , qty: 30 } ] )
Em seguida, execute estes comandos:
db.products.find( { item: "card" } ) db.products.aggregate( [ { $match: { qty: { $gt: 20 } } } ] )
Os seguintes exemplos mostram a saída do $queryStats utilizando diferentes tipos de transformação de dados:
O exemplo de saída $queryStats nas seções a seguir pode variar de acordo com a execução de outros comandos.
Exemplo não transformado
Entrada:
db.getSiblingDB("admin").aggregate( [ { $queryStats: { } } ] )
Saída:
[ { key: { queryShape: { cmdNs: { db: 'test', coll: 'products' }, command: 'find', filter: { item: { '$eq': '?string' } } }, client: { driver: { name: 'nodejs|mongosh', version: '5.1.0' }, os: { type: 'Darwin', name: 'darwin', architecture: 'arm64', version: '22.6.0' }, platform: 'Node.js v16.19.1, LE (unified)', version: '5.1.0|1.8.0', application: { name: 'mongosh 1.8.0' } }, collectionType: 'collection' }, keyHash: 'dsoJ+LHAru0z6MJ1/IygJnnLTrlpVYYmPnlmNZbZrLI=', queryShapeHash: "uxMLCvpiJ5N/IRqt4c28/0A8F01C8AA16CA805FF5C1A5737535F97E40C2A90CE91A82CCB7A74C7CCB9C48", metrics: { lastExecutionMicros: Long("4254"), execCount: Long("1"), totalExecMicros: { sum: Long("4254"), max: Long("4254"), min: Long("4254"), sumOfSquares: Decimal128("18096516") }, firstResponseExecMicros: { sum: Long("4254"), max: Long("4254"), min: Long("4254"), sumOfSquares: Decimal128("18096516") }, docsReturned: { sum: Long("1"), max: Long("1"), min: Long("1"), sumOfSquares: Decimal128("1") }, planningTimeMicros: { sum: Long("2150"), max: Long("2150"), min: Long("2150"), sumOfSquares: Decimal128("4622500") }, costBasedRanker: { cardinalityEstimationMethods: { Histogram: Long("0"), Sampling: Long("0"), Heuristics: Long("0"), Mixed: Long("0"), Metadata: Long("0"), Code: Long("0") }, nDocsSampled: { sum: Long("0"), max: Long("0"), min: Long("0"), sumOfSquares: Decimal128("0") } }, firstSeenTimestamp: ISODate("2023-09-14T12:30:27.989Z"), latestSeenTimestamp: ISODate("2023-09-14T12:30:27.989Z") }, asOf: Timestamp({ t: 1694695007, i: 0 }) }, { key: { queryShape: { cmdNs: { db: 'test', coll: 'products' }, command: 'aggregate', pipeline: [ { '$match': { qty: { '$gt': '?number' } } } ] }, apiVersion: '1', client: { driver: { name: 'nodejs|mongosh', version: '5.1.0' }, os: { type: 'Darwin', name: 'darwin', architecture: 'arm64', version: '22.6.0' }, platform: 'Node.js v16.19.1, LE (unified)', version: '5.1.0|1.8.0', application: { name: 'mongosh 1.8.0' } }, collectionType: 'collection', cursor: { batchSize: '?number' } }, keyHash: '2QLBfL0m1lliStdN4XvBjqVBtZQ6ffaB2L1pJ99twT8=', queryShapeHash: "uxMLCvpiJ5N/IRqt4c28/0A8F01C8AA16CA805FF5C1A5737535F97E40C2A90CE91A82CCB7A74C7CCB9C48", metrics: { lastExecutionMicros: Long("350"), execCount: Long("3"), totalExecMicros: { sum: Long("3084"), max: Long("2499"), min: Long("235"), sumOfSquares: Decimal128("6422726") }, firstResponseExecMicros: { sum: Long("3084"), max: Long("2499"), min: Long("235"), sumOfSquares: Decimal128("6422726") }, docsReturned: { sum: Long("3"), max: Long("1"), min: Long("1"), sumOfSquares: Decimal128("3") }, planningTimeMicros: { sum: Long("1850"), max: Long("850"), min: Long("420"), sumOfSquares: Decimal128("1252500") }, costBasedRanker: { cardinalityEstimationMethods: { Histogram: Long("0"), Sampling: Long("0"), Heuristics: Long("0"), Mixed: Long("0"), Metadata: Long("0"), Code: Long("0") }, nDocsSampled: { sum: Long("0"), max: Long("0"), min: Long("0"), sumOfSquares: Decimal128("0") } }, firstSeenTimestamp: ISODate("2023-11-29T21:16:17.796Z"), latestSeenTimestamp: ISODate("2023-11-29T21:17:12.385Z") }, asOf: Timestamp({ t: 1701292827, i: 0 }) } ]
Exemplo transformado
Entrada:
db.getSiblingDB("admin").aggregate( [ { $queryStats: { transformIdentifiers: { algorithm: "hmac-sha-256" , hmacKey: BinData(8, "87c4082f169d3fef0eef34dc8e23458cbb457c3sf3n2") } } } ] )
Saída:
[ { key: { queryShape: { cmdNs: { db: 'Mtrt3iG7dsX5c5uCSIhSVlcu5qD3u3xx2EQnS1dJLxM=', coll: '3oJE6AyOuf8h5NqWiXETxulFlPm3QUXbMnMjL2EqAU4=' }, command: 'find', filter: { 'VWVRow7Ure92ajRPfrpWiU8OtDeWcLePFIq0+tooBng=': { '$eq': '?string' } } }, client: { driver: { name: 'nodejs|mongosh', version: '5.1.0' }, os: { type: 'Darwin', name: 'darwin', architecture: 'arm64', version: '22.6.0' }, platform: 'Node.js v16.19.1, LE (unified)', version: '5.1.0|1.8.0', application: { name: 'mongosh 1.8.0' } }, collectionType: 'collection' }, keyHash: 'q4vxam+wbk8tTrl8D0MDFH1LQAbI8fWspfkGKhEUROk=', queryShapeHash: "uxMLCvpiJ5N/IRqt4c28/0A8F01C8AA16CA805FF5C1A5737535F97E40C2A90CE91A82CCB7A74C7CCB9C48", metrics: { lastExecutionMicros: Long("4254"), execCount: Long("1"), keysExamined: { sum: Int("5"), max: Long("5"), min: Long("5"), sumOfSquares: Decimal128("25") }, docsExamined: { sum: Long("1"), max: Long("1"), min: Long("1"), sumOfSquares: Decimal128("1") }, hasSortStage: {true: Long("0"), false: Long("1")}, usedDisk: {true: Long("0"), false: Long("1")}, fromMultiPlanner: {true: Long("0"), false: Long("1")}, fromPlanCache: {true: Long("1"), false: Long("0")}, totalExecMicros: { sum: Long("4254"), max: Long("4254"), min: Long("4254"), sumOfSquares: Decimal128("18096516") }, firstResponseExecMicros: { sum: Long("4254"), max: Long("4254"), min: Long("4254"), sumOfSquares: Decimal128("18096516") }, docsReturned: { sum: Long("1"), max: Long("1"), min: Long("1"), sumOfSquares: Decimal128("1") }, planningTimeMicros: { sum: Long("2150"), max: Long("2150"), min: Long("2150"), sumOfSquares: Decimal128("4622500") }, costBasedRanker: { cardinalityEstimationMethods: { Histogram: Long("0"), Sampling: Long("0"), Heuristics: Long("0"), Mixed: Long("0"), Metadata: Long("0"), Code: Long("0") }, nDocsSampled: { sum: Long("0"), max: Long("0"), min: Long("0"), sumOfSquares: Decimal128("0") } }, firstSeenTimestamp: ISODate("2023-09-14T12:30:27.989Z"), latestSeenTimestamp: ISODate("2023-09-14T12:30:27.989Z") }, asOf: Timestamp({ t: 1694695712, i: 0 }) }, { key: { queryShape: { cmdNs: { db: 'Mtrt3iG7dsX5c5uCSIhSVlcu5qD3u3xx2EQnS1dJLxM=', coll: '3oJE6AyOuf8h5NqWiXETxulFlPm3QUXbMnMjL2EqAU4=' }, command: 'aggregate', pipeline: [ { '$match': { 'RVqrwNEPotzdKnma/T7s4YcgNvpqO29BMDoni2N4IMI=': { '$gt': '?number' } } } ] }, apiVersion: '1', client: { driver: { name: 'nodejs|mongosh', version: '5.1.0' }, os: { type: 'Darwin', name: 'darwin', architecture: 'arm64', version: '22.6.0' }, platform: 'Node.js v16.19.1, LE (unified)', version: '5.1.0|1.8.0', application: { name: 'mongosh 1.8.0' } }, collectionType: 'collection', cursor: { batchSize: '?number' } }, keyHash: 'HEhpQTYB+/wVoHLkOkMd+EC2jguQlMJ1N/vTE7+b8Js=', queryShapeHash: "uxMLCvpiJ5N/IRqt4c28/0A8F01C8AA16CA805FF5C1A5737535F97E40C2A90CE91A82CCB7A74C7CCB9C48", metrics: { lastExecutionMicros: Long("350"), execCount: Long("3"), keysExamined: { sum: Int("5"), max: Long("5"), min: Long("5"), sumOfSquares: Decimal128("25") }, docsExamined: { sum: Long("1"), max: Long("1"), min: Long("1"), sumOfSquares: Decimal128("1") }, hasSortStage: {true: Long("0"), false: Long("1")}, usedDisk: {true: Long("0"), false: Long("1")}, fromMultiPlanner: {true: Long("0"), false: Long("1")}, fromPlanCache: {true: Long("1"), false: Long("0")}, totalExecMicros: { sum: Long("3084"), max: Long("2499"), min: Long("235"), sumOfSquares: Decimal128("6422726") }, firstResponseExecMicros: { sum: Long("3084"), max: Long("2499"), min: Long("235"), sumOfSquares: Decimal128("6422726") }, docsReturned: { sum: Long("3"), max: Long("1"), min: Long("1"), sumOfSquares: Decimal128("3") }, planningTimeMicros: { sum: Long("1850"), max: Long("850"), min: Long("420"), sumOfSquares: Decimal128("1252500") }, costBasedRanker: { cardinalityEstimationMethods: { Histogram: Long("0"), Sampling: Long("0"), Heuristics: Long("0"), Mixed: Long("0"), Metadata: Long("0"), Code: Long("0") }, nDocsSampled: { sum: Long("0"), max: Long("0"), min: Long("0"), sumOfSquares: Decimal128("0") } }, firstSeenTimestamp: ISODate("2023-11-29T21:16:17.796Z"), latestSeenTimestamp: ISODate("2023-11-29T21:17:12.385Z") }, asOf: Timestamp({ t: 1701293302, i: 0 }) }, ]
Para usar o driver Node.js do MongoDB para adicionar um estágio $queryStats a um pipeline de agregação , use o operador $queryStats em um objeto de pipeline.
O exemplo a seguir cria um estágio de pipeline que gera estatísticas de tempo de execução não transformadas sobre queries registradas. Em seguida, o exemplo executa o agregação pipeline:
const pipeline = [{ $queryStats: {} }]; const adminDb = client.db("admin"); const cursor = adminDb.aggregate(pipeline); return cursor;
Exemplo transformado
Para retornar estatísticas de query transformada, inclua o campo transformIdentifiers no estágio do pipeline:
const pipeline = [ { $queryStats: { transformIdentifiers: { algorithm: "hmac-sha-256", hmacKey: new Binary(Buffer.from("87c4082f169d3fef0eef34dc8e23458cbb457c3aabbccddeeff00112233445566778899", "hex"), 8) } } } ]; const adminDb = client.db("admin"); const cursor = adminDb.aggregate(pipeline); return cursor;
Collection de dados do MongoDB Atlas
O MongoDB Atlas usa periodicamente $queryStats para coletar dados anônimos sobre suas query, o que ajuda a melhorar os produtos MongoDB. Seus dados também podem ser usados para fazer sugestões de funcionalidades com base no uso. O MongoDB mantém os dados coletados com $queryStats por quatro anos.
Quando o Atlas executa o $queryStats em seu sistema, ele usa uma chave HMAC exclusiva por organização do Atlas para transformar seus dados e evitar a coleta de informações confidenciais.