Definición
db.setProfilingLevel(level, options)Cambiado en la versión 5.0.
En una
mongodinstancia, el método habilita, deshabilita o configura el perfilador de base de datos. El perfilador captura y registra datos sobre el rendimiento de las operaciones de escritura, cursores y comandos de base de datos en una instancia activa demongod. Si el perfilador está desactivado, el método configura cómo se registran las operaciones lentas en el registro de diagnóstico.Nota
Los cambios realizados en el nivel de perfilado con
db.setProfilingLevel()no persisten. Cuando el servidor se reinicia, vuelve a0(el valor por defecto), o al valor establecido mediante la configuraciónoperationProfiling.modeo la opción de línea de comandos--profile.Si el nivel del perfilador de base de datos es
1o2(específicamente, el perfilador de base de datos está habilitado),slowms y sampleRate afectan el comportamiento tanto del perfilador como deldiagnostic log.Si el nivel del generador de perfiles de base de datos es
0(específicamente, el generador deperfiles de base de datos está deshabilitado),slowms y sampleRate afectan solo al registro de diagnóstico.Con las instancias
mongos, el método establece las configuracionesslowms,sampleRateyfilter, que determinan cómo se registran las operaciones en el registro de diagnóstico. No es posible activar el perfilador de base de datos en unamongosinstancia porquemongosno tiene ninguna colección en la que el perfilador pueda guardar. El nivelprofiledebe ser0para una instanciamongos.Puedes especificar un filtro en las instancias
mongodymongospara controlar qué operaciones registra el generador de perfiles. Cuando especificas una instanciafilterpara el generador de perfiles, las opciones slowms y sampleRate no se utilizan para las líneas de registro de perfiles y consultas lentas.db.setProfilingLevel()proporciona una envoltura alrededor del comandoprofile.A partir de MongoDB 5.0, los cambios realizados en el perfilador de la base de datos
level,slowms,sampleRateofiltermediante el comandoprofileo el método de envolturadb.setProfilingLevel()se registran en ellog file.
Compatibilidad
Este método está disponible en implementaciones alojadas en los siguientes entornos:
- MongoDB Atlas: El servicio totalmente administrado para implementaciones de MongoDB en la nube.
Importante
Este comando no es compatible con los clústeres M0 y Flex. Para obtener más información, consulte Comandos no compatibles.
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Sintaxis
El método db.setProfilingLevel() tiene la siguiente forma:
db.setProfilingLevel(<level>, <options>)
Parámetros
Parameter | Tipo | Descripción |
|---|---|---|
entero | Configura el nivel del perfilador de la base de datos. Los siguientes niveles de perfilador están disponibles:
Debido a que la creación de perfiles no está disponible en | |
documento o número entero | Opcional. Acepta un número entero o un documento de opciones. Si se pasa un valor entero como argumento
|
Devuelve
El método devuelve un documento que contiene los valores anteriores de la configuración.
{ "was" : 2, "slowms" : 100, "sampleRate" : 1, "filter" : { "$and" : [ { "op" : { "$eq" : "query" } }, { "millis" : { "$gt" : 20000 } } ] }, "note" : "When a filter expression is set, slowms and sampleRate are not used for profiling and slow-query log lines.", "ok" : 1 }
{ "was" : 0, "slowms" : 100, "sampleRate" : 1, "filter" : { "$and" : [ { "op" : { "$eq" : "query" } }, { "millis" : { "$gte" : 2000 } } ] }, "note" : "When a filter expression is set, slowms and sampleRate are not used for profiling and slow-query log lines.", "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1572991238, 1), "signature" : { "hash" : BinData(0,"hg6GnlrVhV9MAhwWdeHmHQ4T4qU="), "keyId" : Long("6755945537557495811") } }, "operationTime" : Timestamp(1572991238, 1) }
{ "was" : 0, "slowms" : 100, "sampleRate" : 1, "filter" : { "$and" : [ { "op" : { "$eq" : "query" } }, { "millis" : { "$gte" : 2000 } } ] }, "note" : "When a filter expression is set, slowms and sampleRate are not used for profiling and slow-query log lines.", "ok" : 1, "operationTime" : Timestamp(1572991499, 2), "$clusterTime" : { "clusterTime" : Timestamp(1572991499, 2), "signature" : { "hash" : BinData(0,"nhCquIxUw7thlrBudXe3PnsnvP0="), "keyId" : Long("6755946491040235540") } } }
Dónde:
wases la configuración de nivel anterior.sampleRatees la configuración anterior de sampleRate.filteres la configuración de filtro anterior.notees una string que explica el comportamiento defilter. Este campo solo aparece en la salida cuandofiltertambién está presente.
Nota
Los campos filter y note solo aparecen en la salida si estaban presentes en la configuración de nivel anterior.
Para ver el nivel actual de creación de perfiles, consulte db.getProfilingStatus().
Comportamiento
Advertencia
El perfilado puede degradar el rendimiento y exponer datos de la consulta no cifrados en el registro del sistema. Considera detenidamente cualquier implicación de rendimiento y seguridad antes de configurar y activar el perfilador en una implementación de producción.
Consulte Sobrecarga del perfilador para obtener más información sobre la posible degradación del rendimiento.
Ejemplos
Activar el perfilador y establecer el umbral y la tasa de muestreo de operaciones lentas
El siguiente ejemplo establece para una instancia de mongod:
el nivel de perfilado a
1,El umbral de operación lenta se reduce a
20milisegundos, yla frecuencia de muestreo a
0.42.
db.setProfilingLevel(1, { slowms: 20, sampleRate: 0.42 })
La operación devuelve un documento con los valores anteriores de la configuración.
Para ver el nivel actual de creación de perfiles, consulte db.getProfilingStatus().
Desactivar el perfilador y Configurar el Umbral de Operación Lenta y la Tasa de Muestreo
El siguiente ejemplo establece para una mongod o mongos instancia:
el nivel de perfilado a
0,El umbral de operación lenta se reduce a
20milisegundos, yla frecuencia de muestreo a
0.42.
db.setProfilingLevel(0, { slowms: 20, sampleRate: 0.42 })
La operación devuelve un documento con los valores anteriores de la configuración.
Para ver el nivel actual de creación de perfiles, consulte db.getProfilingStatus().
Configura un filtro para determinar las operaciones perfiladas
El siguiente ejemplo establece para una instancia de mongod:
el nivel de perfilado a
1,un filtro de
{ op: "query", millis: { $gt: 2000 } }, que hace que el generador de perfiles solo registre las operacionesqueryque tardaron más de 2 segundos.
db.setProfilingLevel( 1, { filter: { op: "query", millis: { $gt: 2000 } } } )
La operación devuelve un documento con los valores anteriores de la configuración.
Para ver el nivel actual de creación de perfiles, consulte db.getProfilingStatus().
Establecer un filtro sin habilitar el perfilador
Puede configurar un filter sin habilitar el generador de perfiles de la base de datos. El siguiente ejemplo utiliza un filtro con un nivel de perfilado de 0.
db.setProfilingLevel( 0, { filter: { op: "query", millis: { $gt: 2000 } } } )
Dado que el nivel de perfilado es 0, el perfilador está deshabilitado y no registra las operaciones coincidentes en la colección del perfilador. El filtro sigue aplicándose al registro de diagnóstico.
La operación devuelve un documento con los valores anteriores de la configuración.
Para ver el nivel actual de creación de perfiles, consulte db.getProfilingStatus().
Desactivar un filtro
Para borrar un filtro de perfil, ejecute db.setProfilingLevel() con la opción filter: "unset".
db.setProfilingLevel( 1, { filter: "unset" } )
La operación devuelve un documento con los valores anteriores de la configuración.
Para ver el nivel actual de creación de perfiles, consulte db.getProfilingStatus().