Docs Menu
Docs Home
/ /
Etapas de la pipeline de agregación

$queryStats (agregación)

Nuevo en la versión 6.0.7.

$queryStats

Advertencia

La etapa de agregación $queryStats no es compatible y no se garantiza su estabilidad en futuras versiones. No cree funcionalidades que dependan de un formato de salida específico de esta etapa, ya que este podría cambiar en futuras versiones.

Devuelve estadísticas de tiempo de ejecución para los query registrados.

$queryStats Recopila e informa métricas para aggregate()find() distinct() Consultas, y. $queryStats no recopila información para consultas que utilizan cifrado consultable.

La $queryStats etapa está habilitada en implementaciones alojadas en MongoDB Atlas con un nivel de clúster de al menos10 M.

Para ejecutar la etapa $queryStats, tu pipeline debe cumplir los siguientes requisitos:

  • La canalización debe ejecutarse en la base de datos admin.

  • $queryStats Debe ser la primera etapa del proceso.

db.adminCommand( {
aggregate: 1,
pipeline: [
{
$queryStats: {
transformIdentifiers: {
algorithm: <string>,
hmacKey: <binData> /* subtype 8 - used for sensitive data */
}
}
}
],
cursor: { }
} )

Importante

No se puede ejecutar $queryStats en una colección específica. Para ver ejemplos completos, consulte Ejemplos.

$queryStats toma los siguientes campos:

Campo
Necesidad
Tipo
Descripción

transformIdentifiers

Opcional

Documento

Especifica opciones de transformación adicionales para la salida $queryStats.

transformIdentifiers
.algorithm

Obligatorio si se especifica el objeto transformIdentifiers

String

El tipo de transformación hash aplicada a la información del espacio de nombres y a los nombres de campo en la salida. El único valor algorithm admitido actualmente es hmac-sha-256.

transformIdentifiers
.hmacKey

Obligatorio si se especifica el objeto transformIdentifiers

binData

La entrada de clave privada en la transformación HMAC.

Si su implementación aplica control de acceso, el usuario que ejecuta $queryStats debe tener los siguientes permisos:

  • Para ejecutar $queryStats sin la transformIdentifiers opción, el usuario debe tener el privilegio de queryStatsRead acción.

  • Para ejecutar $queryStats con la transformIdentifiers opción, el usuario debe tener las acciones de privilegio queryStatsRead queryStatsReadTransformed y.

El rol integrado proporciona clusterMonitor los queryStatsRead queryStatsReadTransformed privilegios y. El siguiente ejemplo otorga el clusterMonitor rol en la admin base de datos:

db.grantRolesToUser(
"<user>",
[ { role: "clusterMonitor", db: "admin" } ]
)

Las siguientes secciones describen detalles de comportamiento de la etapa $queryStats.

Las estadísticas de la etapa $queryStats se registran en una colección virtual almacenada en memoria. El límite de memoria de la colección virtual es del 1% de la memoria total del sistema.

$queryStats agrupa queries con propiedades comunes en el mismo documento de salida. El documento resultante se denomina entrada de estadísticas de query.

$queryStats Agrupa consultas similares normalizando los valores de los campos proporcionados por el usuario según sus tipos de datos. Por ejemplo, un filtro especificado como { item: 'card' } se normaliza a { item : '?string'}. $queryStats también normaliza los valores de algunas opciones de consulta, como hint y comment.

$queryStats conserva valores literales para opciones como readConcern y readPreference.

Para obtener la lista completa de opciones incluidas en una entrada de estadísticas de consulta,consulte Buscar comando Forma de consulta.

Cuando se especifica una clave HMAC en la opción transformIdentifiers, $queryStats utiliza la clave HMAC para aplicar una función hash HMAC-SHA-256 en los siguientes datos:

  • Nombres de campos del documento

  • Nombres de colecciones

  • Nombres de bases de datos

$queryStats no aplica la transformación HMAC a los siguientes datos:

  • Palabras clave MQL como nombres de operadores (por ejemplo, $gte).

  • Nombres de parámetros como el partitionBy parámetro $setWindowFields en.

  • Valores de campo. $queryStats normaliza los valores de campo en una consulta a sus tipos de datos (como número o cadena) cuando se registra la consulta. $queryStats nunca almacena valores de campo que contengan datos del usuario.

Para ver un ejemplo de salida transformada, consulte Ejemplo transformado.

MongoDB registra $queryStats operaciones en los registros de implementación. De forma predeterminada, MongoDB solo registra la invocación de $queryStats operaciones, no su salida. Para $queryStats las operaciones que incluyen la transformIdentifiers opción, puede especificar si la salida transformada se incluye en la entrada del registro.

Para aprender a controlar el $queryStats comportamiento del registro de, consulte Alternar la salida del registro de $queryStats.

$queryStats Devuelve una matriz de entradas de estadísticas de consulta. Algunas propiedades de estas entradas contienen valores literales y otras están normalizadas para agrupar consultas comunes.

Las entradas de estadísticas de consulta contienen los siguientes documentos de nivel superior:

Documento
Descripción

key

La combinación única de atributos que define una entrada en la salida de las estadísticas de la consulta. El atributo key contiene atributos como:

Cada combinación única de atributos crea una entrada independiente en la colección virtual $queryStats.

asOf

La hora UTC en la que $queryStats leyó esta entrada de la colección virtual $queryStats. asOf no necesariamente devuelve la misma hora UTC para cada resultado. Internamente, la estructura de datos está particionada y cada partición se leerá en un momento específico.

metrics

Contiene métricas de tiempo de ejecución agregadas asociadas a cada entrada de estadísticas de consulta. Cada entrada registra las estadísticas de cada consulta que comparte la misma clave.

Cada documento de la matriz de salida contiene los siguientes campos:

Campo
Tipo
Literal o normalizado
Descripción

key

Documento

Literal

Contiene la forma del query y atributos de query adicionales que agrupan un conjunto de queries

key.queryShape

Documento

Literal

Contiene atributos que se utilizan para agrupar consultas similares. Para más información, consulte Forma de consulta.

key.client

Documento

Literal

Describe la información del cliente asociada con la clave.

key.client.application

Documento

Literal

El nombre de la aplicación cliente

key.client.driver

Documento

Literal

Describe el controlador utilizado para emitir la consulta.

key.client.driver.name

String

Literal

Nombre del controlador utilizado para emitir la consulta. Los valores posibles son mongosh y nodejs.

key.client.driver.version

String

Literal

Número de versión del controlador utilizado para emitir la consulta

key.client.os

Documento

Literal

Describe el sistema operativo utilizado por el cliente que emitió la consulta.

key.client.os.type

String

Literal

Tipo de sistema operativo

key.client.os.name

String

Literal

Nombre del sistema operativo

key.client.os.architecture

String

Literal

Arquitectura del sistema operativo. Los valores posibles son arm64 y x86_64.

key.client.os.version

String

Literal

Número de versión del sistema operativo

key.readConcern

Documento

Literal

La preocupación de la lectura por la clave

key.collectionType

String

Literal

El tipo de colección en el que se emitió la consulta. Para más información, consulte Tipo de colección.

key.hint

Documento o cadena

Normalizado

El índice que se utilizó como pista para la consulta

key.batchSize

String

Normalizado

El tamaño del lote de la clave. El tamaño del lote especifica el número máximo de documentos que se pueden devolver en cada lote del resultado de una consulta. De forma predeterminada, el tamaño del lote inicial es el menor de 101 documentos o 16 mebibytes (MiB) de documentos. Los lotes posteriores tienen un tamaño máximo de 16 MiB. batchSize puede imponer un límite menor que 16 MiB, pero no mayor. Cuando se establece,batchSize es el menor de batchSize documentos o 16 MiB de documentos.

key.comment

String

Normalizado

Comentario asociado a la clave

key.maxTimeMS

String

Normalizado

key.noCursorTimeout

Booleano

Normalizado

key.readPreference

String

Literal

Preferencia de lectura asociada a la clave

key.apiVersion

String

Literal

La versión de la Stable API asociada con la clave. Consulta API Estable.

key.apiStrict

Booleano

Literal

El apiStrict valor del parámetro asociado a la clave.Consulte Parámetros de API estables.

key.apiDeprecationErrors

Booleano

Literal

El apiDeprecationErrors valor del parámetro asociado a la clave.Consulte Parámetros de API estables.

keyHash

String

Literal

Representación hash de los valores en key. Cada valor único de keyHash corresponde a una entrada única en el almacén de memoria $queryStats.

metrics

Documento

Literal

Describe las estadísticas de tiempo de ejecución para la clave

metrics.lastExecutionMicros

Número largo

Literal

Tiempo de ejecución de la consulta más reciente para todas las consultas con la clave dada

metrics.execCount

Número largo

Literal

Número de veces que se han ejecutado consultas con la clave dada

metrics.totalExecMicros

Documento

Literal

Describe el tiempo total empleado en ejecutar consultas con la clave dada. Si la consulta getMores generó, totalExecMicros incluye el tiempo empleado en procesar las getMore solicitudes. totalExecMicros no incluye el tiempo de espera del cliente.

Todos los subcampos de totalExecMicros se informan en microsegundos.

metrics
.totalExecMicros
.sum

Número largo

Literal

Tiempo total dedicado a ejecutar consultas con la clave dada

metrics
.totalExecMicros
.max

Número largo

Literal

Mayor cantidad de tiempo empleado en ejecutar una consulta con la clave dada

metrics
.totalExecMicros
.min

Número largo

Literal

Menor cantidad de tiempo empleado en ejecutar una consulta con la clave dada

metrics
.totalExecMicros
.sumOfSquares

NumberDecimal

Literal

Suma de los cuadrados de los tiempos totales de ejecución de todas las consultas con la clave dada. Un valor alto de sumOfSquares indica una alta varianza en los tiempos de ejecución de las consultas.

metrics
.firstResponseExecMicros

Documento

Literal

Describe el tiempo transcurrido desde que una consulta dentro de la clave comienza a procesarse hasta que el servidor devuelve el primer lote de resultados.

Todos los subcampos de firstResponseExecMicros se informan en microsegundos.

metrics
.firstResponseExecMicros
.sum

Número largo

Literal

Cantidad combinada de tiempo transcurrido desde el comienzo del procesamiento de la consulta hasta que el servidor devuelve el primer lote de resultados

metrics
.firstResponseExecMicros
.max

Número largo

Literal

Mayor cantidad de tiempo transcurrido desde el inicio del procesamiento de la consulta hasta que el servidor devuelve el primer lote de resultados

metrics
.firstResponseExecMicros
.min

Número largo

Literal

El menor tiempo transcurrido desde el inicio del procesamiento de la consulta hasta que el servidor devuelve el primer lote de resultados

metrics
.firstResponseExecMicros
.sumOfSquares

NumberDecimal

Literal

Suma de los cuadrados de las cantidades de tiempo transcurrido desde el comienzo del procesamiento de la consulta hasta que el servidor devuelve el primer lote de resultados.

Un valor alto sumOfSquares indica una alta variación en los tiempos de procesamiento de consultas.

metrics.docsReturned

Documento

Literal

Describe la cantidad de documentos devueltos por consultas dentro de la clave

metrics
.docsReturned
.sum

Número largo

Literal

Número total de documentos devueltos por consultas con la clave dada

metrics
.docsReturned
.max

Número largo

Literal

Número máximo de documentos devueltos por una consulta con la clave dada

metrics
.docsReturned
.min

Número largo

Literal

El menor número de documentos devueltos por una query con la clave proporcionada.

metrics
.docsReturned
.sumOfSquares

NumberDecimal

Literal

Suma de los cuadrados del número de documentos devueltos por una consulta dentro de la clave.

Un valor sumOfSquares alto indica una alta variación en la cantidad de documentos devueltos entre consultas individuales.

metrics.firstSeenTimestamp

fecha

Literal

Hora en que se utilizó por primera vez una consulta con la clave dada desde el último reinicio

metrics.lastSeenTimestamp

fecha

Literal

Hora en que se utilizó por última vez una consulta con la clave dada

El campo key.collectionType indica el tipo de colección en la que se emitió la consulta registrada. El valor collectionType puede ser uno de los siguientes:

Campo
Descripción

changeStream

La consulta fue una operación de flujo de cambio.

collection

La consulta se emitió en una colección estándar.

nonExistent

La query se emitió en una colección que no existe.

timeseries

La consulta se emitió en una colección de series temporales.

view

La consulta se emitió en una vista.

virtual

La consulta se emitió en una colección virtual. En estas colecciones virtuales se realizan las siguientes operaciones:

El key.queryShape contiene atributos de consulta que se utilizan para agrupar consultas similares. Los campos en key.queryShape varían según el comando que generó la entrada de estadísticas de consulta. $queryStats crea entradas de estadísticas de consulta para aggregate find los comandos y.

Cada propiedad de forma de consulta corresponde a una opción de consulta. Por ejemplo, key.queryShape.sort corresponde a la sort() especificación para la forma de consulta.

La siguiente tabla describe las propiedades de forma de consulta para los comandos find.

Campo
Tipo
Literal o normalizado

key.queryShape.filter

Documento

Normalizado

key.queryShape.sort

Documento

Literal

key.queryShape.projection

Documento

Normalizado

key.queryShape.skip

entero

Normalizado

key.queryShape.limit

entero

Normalizado

key.queryShape.singleBatch

Booleano

Literal

key.queryShape.max

Documento

Normalizado

key.queryShape.min

Documento

Normalizado

key.queryShape.returnKey

Booleano

Literal

key.queryShape.showRecordId

Booleano

Literal

key.queryShape.tailable

Booleano

Literal

key.queryShape.oplogReplay

Booleano

Literal

key.queryShape.awaitData

Booleano

Literal

key.queryShape.collation

Documento

Literal

key.queryShape.allowDiskUse

Booleano

Literal

key.queryShape.let

Documento

Normalizado

La siguiente tabla describe las propiedades de forma de consulta para los comandos aggregate.

Campo
Tipo
Literal o normalizado

key.queryShape.pipeline

Arreglo

Normalizado

key.queryShape.explain

Booleano

Literal

key.queryShape.allowDiskUse

Booleano

Literal

key.queryShape.collation

Documento

Literal

key.queryShape.hint

Cadena o Documento

Normalizado

key.queryShape.let

Documento

Normalizado

Para ejecutar los ejemplos de esta sección, comience con los siguientes datos:

db.products.insertMany(
[
{ item: "card", qty: 15 },
{ item: "envelope", qty: 20 },
{ item: "stamps" , qty: 30 }
]
)

Luego, ejecute estos comandos:

db.products.find( { item: "card" } )
db.products.aggregate( [
{
$match: { qty: { $gt: 20 } }
}
] )

Los siguientes ejemplos muestran la salida de $queryStats utilizando diferentes tipos de transformación de datos:

La salida del ejemplo $queryStats en las siguientes secciones puede variar según la ejecución de otros comandos.

Aporte:

db.getSiblingDB("admin").aggregate( [
{
$queryStats: { }
}
] )

Salida:

[
{
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")
},
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")
},
firstSeenTimestamp: ISODate("2023-11-29T21:16:17.796Z"),
latestSeenTimestamp: ISODate("2023-11-29T21:17:12.385Z")
},
asOf: Timestamp({ t: 1701292827, i: 0 })
}
]

Aporte:

db.getSiblingDB("admin").aggregate( [
{
$queryStats: {
transformIdentifiers: {
algorithm: "hmac-sha-256" ,
hmacKey: BinData(8, "87c4082f169d3fef0eef34dc8e23458cbb457c3sf3n2")
}
}
}
] )

Salida:

[
{
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=',
metrics: {
lastExecutionMicros: Long("4254"),
execCount: Long("1"),
keysExamined: {
sum: Int("5"),
max: Long("5"),
min: Long("5"),
sumOfSquares: Long("25")
},
docsExamined: {
sum: Long("1"),
max: Long("1"),
min: Long("1"),
sumOfSquares: Long("1")
},
hasSortStage: false,
usedDisk: false,
fromMultiPlanner: false,
fromPlanCache: true,
totalExecMicros: {
sum: Long("4254"),
max: Long("4254"),
min: Long("4254"),
sumOfSquares: Long("18096516")
},
firstResponseExecMicros: {
sum: Long("4254"),
max: Long("4254"),
min: Long("4254"),
sumOfSquares: Long("18096516")
},
docsReturned: {
sum: Long("1"),
max: Long("1"),
min: Long("1"),
sumOfSquares: Long("1")
},
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=',
metrics: {
lastExecutionMicros: Long("350"),
execCount: Long("3"),
keysExamined: {
sum: Int("5"),
max: Long("5"),
min: Long("5"),
sumOfSquares: Long("25")
},
docsExamined: {
sum: Long("1"),
max: Long("1"),
min: Long("1"),
sumOfSquares: Long("1")
},
hasSortStage: false,
usedDisk: false,
fromMultiPlanner: false,
fromPlanCache: true,
totalExecMicros: {
sum: Long("3084"),
max: Long("2499"),
min: Long("235"),
sumOfSquares: Long("6422726")
},
firstResponseExecMicros: {
sum: Long("3084"),
max: Long("2499"),
min: Long("235"),
sumOfSquares: Long("6422726")
},
docsReturned: {
sum: Long("3"),
max: Long("1"),
min: Long("1"),
sumOfSquares: Long("3")
},
firstSeenTimestamp: ISODate("2023-11-29T21:16:17.796Z"),
latestSeenTimestamp: ISODate("2023-11-29T21:17:12.385Z")
},
asOf: Timestamp({ t: 1701293302, i: 0 })
},
]

Para utilizar el controlador de MongoDB Node.js para agregar una etapa de $queryStats a una canalización de agregación, utilice el Operador $queryStats en un objeto de canalización.

El siguiente ejemplo crea una etapa de canalización que genera estadísticas de tiempo de ejecución sin transformar sobre las consultas registradas. A continuación, ejecuta la canalización de agregación:

const pipeline = [{ $queryStats: {} }];
const adminDb = client.db("admin");
const cursor = adminDb.aggregate(pipeline);
return cursor;

Para devolver las estadísticas de consulta transformadas, incluya el campo transformIdentifiers en la etapa de canalización:

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;

MongoDB Atlas utiliza periódicamente $queryStats para recopilar datos anónimos sobre tus queries, lo que ayuda a mejorar los productos de MongoDB. Tus datos también pueden utilizarse para hacer sugerencias de funcionalidades en función del uso. MongoDB retiene los datos que recopila con $queryStats durante cuatro años.

Cuando Atlas ejecuta $queryStats en su implementación, utiliza una clave HMAC única por organización Atlas para transformar sus datos y evitar la recopilación de información confidencial.

Volver

$project

En esta página