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 reporta métricas para queries aggregate(), find(), distinct(), count(), update(), insert(), deleteOne() e deleteMany(). $queryStats não coleta informações para queries que usam Queryable Encryption.
Requisitos
O estágio $queryStats é ativado em sistemas hospedados no MongoDB Atlas com uma camada do cluster de pelo menos 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 $queryStats amostra operações
Novidades na versão 9.0.
A partir do MongoDB 9.0, $queryStats coleta estatísticas para uma amostra de 1% de operações de leitura e gravação por padrão. Para alterar a taxa de amostragem, configure 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 testa, sua saída representa um subconjunto das operações executadas em relação ao seu sistema. As contagens e os tempos de execução refletem apenas as operações amostradas.
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
O MongoDB registra operações $queryStats nos registros de sistema. Por padrão, o MongoDB registra apenas a invocação de operações $queryStats, não a saída da operação. Para operações $queryStats que incluem a opção transformIdentifiers, você pode especificar se a saída transformada está incluída na entrada de registro.
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
MongoDB 9.0 atualiza a estrutura de saída do $queryStats para melhorar a organização de 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 | Contém atributos usados para agrupar queries semelhantes. Para obter mais informações, consulte Forma de query. |
| 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 | O tipo de coleção para o qual a query foi emitida. Para obter mais informações, consulte Tipo de coleção. |
| 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 API estável associada à chave. Consulte API estável do MongoDB 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 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 da 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 queries |
| 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 planos 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. Contagens das formas de plano que o MongoDB selecionou para queries com a chave fornecida. Para obter detalhes, consulte Planejar contadores de forma. |
| Documento | literal | Novidades na versão 9.0. Conta as formas gerais dos planos vencedores. Cada plano vencedor corresponde a no máximo um padrão. |
| Documento | literal | Novidades na versão 9.0. Conta os tipos de estágios do 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 a dados e limites de índice que os planos vencedores utilizam. 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 gravações |
| Número longo | literal | Novidades na versão 9.0. O número de documentos que uma atualização seleciona |
| Número longo | literal | Novidades na versão 9.0. O número de documentos que uma operação de atualização 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 atualização exclui |
| Número longo | literal | Novidades na versão 9.0. O número de documentos que uma operação de atualização insere, excluindo upserts |
| Número longo | literal | Novidades na versão 9.0. O número de atualizações na solicitação de atualização 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 ao CBR quando é usado durante o planejamento de query. O 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 monitorada de pico local e soma do memória rastreada de pico de todos os shards remotos contatados durante a execução da query. Novidades na versão 9.0. |
| Número longo | literal | Uso de memória monitorado local de pico. 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 formas de plano
Novidades na versão 9.0.
O documento metrics.queryPlanner.planShapeCounters registra com que frequência o MongoDB selecionou cada forma de plano para query com a chave fornecida. Use esses contadores para saber em quais planos de query seu volume de trabalho mais depende.
planShapeCounters contém até três subdocumentos, que cada contador de mapa conta:
Subdocumento | Descrição |
|---|---|
| Conta a forma geral de cada plano vencedor. Os padrões são mutuamente exclusivos, portanto, cada execução de query aumenta no máximo um contador de padrão. |
| Conta os tipos de estágios do 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 de í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 de, 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 em um estágio $or incrementa o contador de nós $or correspondente por um, não por 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 emite contadores com uma contagem de zero e omite subdocumentos que não contêm contadores. Se nenhuma das queries registradas produzir contador de forma de plano, o MongoDB omitirá o documento planShapeCounters completamente. Por exemplo, uma query que corresponde a um único documento por _id usa um caminho rápido que não corresponde a nenhuma forma de plano rastreado, de modo que sua entrada de estatísticas de query não contenha nenhum documentoplanShapeCounters .
O MongoDB registra contadores de forma 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ões
Cada nome de contador de padrão lista os estágios do plano vencedor em ordem, começando pelo estágio do caminho de acesso. Por exemplo, ixscanFetchSort conta os planos vencedores que usam uma verificação de índice, busca os documentos correspondentes e, em seguida, classifique-os.
Os nomes dos padrões descrevem planos em um nível aproximado. Eles omitem limite e ignoram estágios e não distinguem se um estágio aplica um filtro ou que tipo de projeção um plano usa. Para determinar esses detalhes, combine um contador de padrão com os contadores nodes e a forma de query para a entrada.
patterns pode conter os seguintes contadores:
Caminho de acesso | Contadores |
|---|---|
Varredura de collection |
|
Varredura de índice com uma busca |
|
Digitalização de índice com um |
|
Digitalização de índice sem uma busca imediata |
|
Contadores de nós
O MongoDB registra os contadores de nós depois de selecionar o mecanismo de execução da query, portanto, os contadores incluem os estágios do plano que representam estágios de agregação enviados para o mecanismo baseado em slots.
nodes pode conter os seguintes contadores:
Contador | Descrição |
|---|---|
| Estágios de verificação de coleção, contados separadamente com base no fato de o estágio aplicar um filtro. |
| Estágios de verificação de índice, contados separadamente com base no fato de o estágio aplicar um filtro. |
| Estágios de busca, contados separadamente com base no fato de o estágio aplicar um filtro. |
| Estágios de interseção de índice baseados em hash, contados separadamente com base no fato de o estágio aplicar um filtro. |
| Estágios de interseção de índices classificados. |
|
|
| Classifique os estágios de mesclagem, contados separadamente, com base no fato de o estágio aplicar 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 limites, contados separadamente por valor limite. |
| Pule estágios, contados separadamente pelo valor de pulo. |
| 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 pesquisa de igualdade, contados separadamente com base no fato de o estágio também desenrolar os resultados. |
| Estágios que descompactam buckets de séries temporais. |
| Estágios de união, contados separadamente por algoritmo de união: união hash, união de loop aninhado, união de loop aninhado indexado e sonda de índice. |
Contadores de caminho de acesso
accessPaths pode conter os seguintes contadores:
Contador | Descrição |
|---|---|
| Varreduras de collection, contadas separadamente com base no fato de a varredura usar ou não o índice clusterizado. |
| Digitalizações de índice que não buscam documentos. |
| Digitalizações de índice que obtêm documentos. |
| Digitalizações que contam chaves de índice sem retornar documentos. |
| Verificações que ignoram chaves de índice duplicadas, contadas separadamente com base na obtenção ou não de documentos da verificação. |
| |
| Pesquisas de texto que usam um índice de texto. |
| Planos vencedores que não usam uma verificação de collection, 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 aumenta |
| Varreduras de índice, contadas separadamente por propriedade de índice . Uma única verificação de índice pode incrementar vários desses contadores. |
| Varreduras de índice, contadas separadamente pelos limites de índice que a varredura usa. O MongoDB aumenta |
| Varreduras de índice onde um campo tem múltiplos 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 campos em key.queryShape variam de acordo com o comando que resultou na entrada das estatísticas da consulta. $queryStats cria entradas de estatísticas de query para 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 |
atualizar forma de query de comando
Novidades na versão 9.0.
A tabela a seguir descreve as propriedades da forma de query para comandos update. $queryStats rastreia estatísticas de forma de query para cada declaração de atualização na matriz 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.
inserir forma de query de comando
Novidades na versão 9.0.
A tabela a seguir descreve as propriedades da forma de query para comandos insert. $queryStats rastreia estatísticas de forma de query uma vez para todo o comando insert, não para cada documento na array documents. O MongoDB sempre normaliza documents para um valor de espaço reservado 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.
excluir forma de query de comando
Novidades na versão 9.0.
A tabela a seguir descreve as propriedades da forma de query para comandos delete. $queryStats rastreia estatísticas de forma de query para cada declaração de exclusão na array deletes, não para o comando delete de nível superior como um todo.
key.queryShape.limit reflete o campo limit da instrução delete, em que 0 exclui todos os documentos correspondentes e 1 exclui um único documento. 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
Se sua forma de query contiver $vectorSearch, $queryStats gerará as seguintes métricas complementares:
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.