Docs Menu
Docs Home
/ /
Analizar el rendimiento

Database Profiler

El generador de perfiles de base de datos recopila información detallada sobre Comandos de base de datos ejecutados contra una base de datos en ejecución mongodInstancia. Esto incluye operaciones CRUD, así como comandos de configuración y administración. El perfilador escribe todos los datos que recopila en una system.profile colección, una colección limitada en cada base de datos perfilada.Consulte la sección "Salida del perfilador de bases de datos" para obtener una descripción general de los system.profile documentos creados por el perfilador.

El perfilador es off de forma predeterminada. Puedes habilitar el perfilador por base de datos o por instancia en uno de varios niveles de perfilado.

Cuando está habilitado, el perfilado afecta al rendimiento de la base de datos y al uso del disco. Consulta Gastos en general del perfilador de base de datos para obtener más información.

Este documento describe varias opciones clave de administración para el generador de perfiles de bases de datos. Para obtener más información, consulte:

Advertencia

No intente crear una colección o vista de series temporales con el nombre system.profile porque el servidor MongoDB fallará.

Están disponibles los siguientes niveles de creación de perfiles:

0
El perfilador está desactivado y no recopila ningún dato. Este es el nivel por defecto del perfilador.
1

El perfilador recopila datos para operaciones que exceden el umbral slowms o coinciden con un filtro especificado.

Cuando se establece un filtro:

  • Las opciones slowms y sampleRate no se utilizan para el perfilado.

  • El perfilador solo captura las operaciones que coinciden con el filtro.

2
El perfilador recopila datos de todas las operaciones.

Puede activar el perfilado de bases de datos para las instancias mongod.

Esta sección muestra cómo usar el mongosh método auxiliar para db.setProfilingLevel() habilitar la creación de perfiles. Para usar un método de controlador, consulte la documentación del controlador.

Al habilitar la generación de perfiles para una mongod instancia, se establece el nivel de generación de perfiles en un valor superior 0 a. El generador de perfiles registra los datos en la system.profile colección. MongoDB crea la system.profile colección en una base de datos después de habilitar la generación de perfiles para dicha base de datos.

Para habilitar la generación de perfiles y establecer su nivel, transfiera este nivel al db.setProfilingLevel() asistente. Por ejemplo, para habilitar la generación de perfiles para todas las operaciones de la base de datos, considere la siguiente operación mongosh en:

db.setProfilingLevel(2)

El shell devuelve un documento que muestra el nivel anterior de perfilado. El "ok" : 1 par clave-valor indica que la operación se realizó correctamente:

{ "was" : 0, "slowms" : 100, "sampleRate" : 1.0, "ok" : 1 }

Para verificar la nueva configuración, consulta la sección Comprobación del nivel de perfilado.

A partir de MongoDB 5.0, los cambios realizados en el perfilador de base de datos level, slowms, sampleRate o filter utilizando el comando profile o el método contenedor db.setProfilingLevel() se registran en el log file.

Los ajustes de creación de perfiles slowms y sampleRate son globales. Cuando se configuran, afectan a todas las bases de datos del proceso.

Cuando se configura mediante el profile comando o db.setProfilingLevel() el método auxiliar de shell, el nivel de perfilado y la configuración de filtro se establecen a nivel de base de datos. Cuando se configuran como opciones de línea de comandos o archivo de configuración, el nivel de perfilado y la filter configuración afectan a todo el proceso.

De forma predeterminada, el umbral de operación lenta es de 100 milisegundos. Para cambiarlo, especifique el valor deseado de una de las siguientes maneras:

Por ejemplo, el siguiente código establece el nivel de creación de perfiles para la mongod instancia actual en 1 y establece el umbral de operación lenta para la instancia mongod en 20 milisegundos:

db.setProfilingLevel(1, { slowms: 20 })

El nivel de perfilado de 1 perfilará las operaciones más lentas que el umbral.

Importante

El umbral de operación lenta se aplica a todas las bases de datos en una instancia de mongod. Se usa tanto por el perfilador de base de datos como por el registro de diagnóstico y debe configurarse en el valor útil más alto para evitar la degradación del rendimiento.

A partir de MongoDB,4.0 db.setProfilingLevel() slowms sampleRate puede mongos usar para mongos configurar y para. Para,slowms las sampleRate opciones de configuración y solo afectan al registro de diagnóstico y no al generador de perfiles, ya que la generación mongosde perfiles no está disponible en.1 []

Por ejemplo, lo siguiente establece el mongos umbral de operación lenta de una instancia para registrar operaciones lentas:

db.setProfilingLevel(0, { slowms: 20 })

Las entradas del perfilador y los mensajes del registro de diagnóstico (es decir, mensajes de registro de mongod/mongos) para las operaciones de lectura/escritura incluyen:

Los miembros secundarios de un set de réplicas ahora registran entradas de oplog que tardan más que el umbral de una operación lenta en aplicarse. Estos mensajes lentos del oplog:

  • Se registran para los secundarios en el diagnostic log.

  • Se documentan en el registro bajo el componente REPL con el texto applied op: <oplog entry> took <num>ms.

  • No depende de los niveles de registro (ya sea a nivel del sistema o del componente)

  • No depende del nivel de perfil.

  • Se ven afectados por slowOpSampleRate.

El perfilador no captura entradas lentas del oplog.

Nuevo en la versión 3.6.

Para perfilar solo un subconjunto muestreado aleatoriamente de todas las operaciones lentas, especifique la frecuencia de muestreo deseada de una de las siguientes maneras: []2

Por defecto, sampleRate está configurado en 1.0, lo que significa que todas las operaciones lentas se perfilan. Cuando sampleRate se encuentra entre 0 y 1, las bases de datos con nivel de perfilado 1 solo perfilan un porcentaje muestreado aleatoriamente de operaciones lentas de acuerdo con sampleRate.

Por ejemplo, el siguiente método establece el nivel de perfil para mongod en 1 y configura el generador de perfiles para muestrear el 42% de todas las operaciones lentas:

db.setProfilingLevel(1, { sampleRate: 0.42 })

El valor de la tasa de muestra modificada también se aplica al registro del sistema.

A partir de MongoDB,4.0 db.setProfilingLevel() slowms sampleRate puede mongos usar para mongos configurar y para. Para,slowms las sampleRate opciones de configuración y solo afectan al registro de diagnóstico y no al generador de perfiles, ya que la generación mongosde perfiles no está disponible en.1 []

Por ejemplo, lo siguiente establece la tasa de muestreo de una instancia de mongos para registrar operaciones lentas:

db.setProfilingLevel(0, { sampleRate: 0.42 })

Importante

Cuando logLevel se establece en 0, MongoDB registra las operaciones lentas en el registro de diagnóstico a una tasa determinada por slowOpSampleRate.

Con configuraciones más altas de logLevel, todas las operaciones aparecen en el registro de diagnóstico independientemente de su latencia, con la siguiente excepción: el registro de mensajes de entrada de oplog lentos por parte de los secundarios. Los secundarios solo registran las entradas de oplog lentas; aumentar el logLevel no registra todas las entradas de oplog.

[1](1, 2) Consulta Perfilado y fragmentación de base de datos.

Puedes configurar un filtro para controlar qué operaciones se perfilan y registran. Puedes configurar el filtro de creación de perfiles de una de las siguientes maneras:

Para las instancias de mongod, filter afecta tanto el registro de diagnóstico como, si está activado, al perfilador.

Para las instancias de mongos, filter afecta únicamente al registro de diagnóstico y no al perfilador, ya que la creación de perfiles no está disponible en mongos.

Nota

Cuando se establece una creación de perfiles de filter, las opciones slowms y sampleRate no afectan el registro de diagnóstico ni al perfilador.

Por ejemplo, el siguiente método se db.setProfilingLevel() mongod establece para una instancia:

  • el nivel de perfilado a 2,

  • el filtro de { op: "query", millis: { $gt: 2000 } }, que genera que el perfilador solo registre query operaciones que tomaron más de 2 segundos.

db.setProfilingLevel( 2, { filter: { op: "query", millis: { $gt: 2000 } } } )

Para ver el nivel de perfil, emita lo siguiente mongosh desde:

db.getProfilingStatus()

El shell devuelve un documento similar al siguiente:

{ "was" : 0, "slowms" : 100, "sampleRate" : 1.0, "ok" : 1 }

El campo was indica el nivel actual de creación de perfiles.

El campo slowms indica el umbral de operation time, en milisegundos, a partir del cual las operaciones se consideran lentas.

El campo sampleRate indica el porcentaje de operaciones lentas que se deben perfilar.

Para deshabilitar la creación de perfiles, utilice el siguiente asistente mongosh en:

db.setProfilingLevel(0)

Para fines de desarrollo en entornos de prueba, puede habilitar la generación de perfiles de base de datos para una instancia completa. El nivel de generación de perfiles se mongod mongod aplica a todas las bases de datos proporcionadas por la instancia.

A fin de activar la creación de perfiles para una instancia de mongod, pasa las siguientes opciones a mongod al inicio.

mongod --profile 1 --slowms 15 --slowOpSampleRate 0.5

Alternativamente, puedes especificar operationProfiling en el archivo de configuración.

Esto establece el nivel de creación de perfiles en 1, define las operaciones lentas como aquellas que duran más de 15 milisegundos y especifica que solo se debe perfilar el 50 % de las operaciones lentas. [2]

Los slowms slowOpSampleRate valores y también influyen en las operaciones que se registran en el registro de diagnóstico cuando se logLevel establece 0 en. Los valores slowms y slowOpSampleRate también permiten configurar el registro de diagnóstico mongos para. []2

Tip

No puedes habilitar la creación de perfiles en una instancia de mongos. Para activar el perfilado en un clúster particionado, debes activar el perfilado para cada instancia de mongod en el clúster.

Sin embargo, se puede establecer --slowms y slowOpSampleRate en mongos para configurar el registro de diagnóstico para operaciones lentas.

El perfilador de base de datos registra información sobre las operaciones de la base de datos en la colección system.profile.

Para ver la información de perfilado, realiza un query a la colección system.profile. Para ver queries de ejemplo, consulta Queries de datos de ejemplo del perfilador. Para obtener una explicación de los datos de salida, consulta Salida del perfilador de base de datos.

Ya no es posible realizar ninguna operación, incluidas las lecturas, en la colección system.profile desde dentro de una transacción.

Tip

Puede utilizar para agregar datos al predicado de consulta para facilitar el análisis de los datos del generador de $comment perfiles.

Esta sección muestra ejemplos de consultas a la system.profile colección. Para obtener una explicación del resultado de la consulta, consulte Salida del Analizador de Base de Datos.

Para devolver las 10 entradas de registro más recientes en la colección system.profile, ejecuta una query similar a la siguiente:

db.system.profile.find().limit(10).sort( { ts : -1 } ).pretty()

Para devolver todas las operaciones, excepto las operaciones de comando ($cmd), ejecuta una query similar a la siguiente:

db.system.profile.find( { op: { $ne : 'command' } } ).pretty()

Para devolver operaciones para una colección particular, ejecuta una query similar a la siguiente. Este ejemplo devuelve operaciones en la colección test de la base de datos mydb:

db.system.profile.find( { ns : 'mydb.test' } ).pretty()

Para devolver operaciones más lentas que 5 milisegundos, ejecute una consulta similar a la siguiente:

db.system.profile.find( { millis : { $gt : 5 } } ).pretty()

Para devolver información de un determinado rango de tiempo, ejecute una consulta similar a la siguiente:

db.system.profile.find({
ts : {
$gt: new ISODate("2012-12-09T03:00:00Z"),
$lt: new ISODate("2012-12-09T03:40:00Z")
}
}).pretty()

El siguiente ejemplo examina el rango de tiempo, suprime el campo user de la salida para facilitar la lectura y ordena los resultados según el tiempo que tardó en ejecutarse cada operación:

db.system.profile.find({
ts : {
$gt: new ISODate("2011-07-12T03:00:00Z"),
$lt: new ISODate("2011-07-12T03:40:00Z")
}
}, { user: 0 }).sort( { millis: -1 } )

En una base de datos con la generación de perfiles habilitada, el show profile asistente en muestra mongosh las 5 operaciones más recientes que tardaron al menos 1 milisegundos en ejecutarse. Ejecute show profile mongoshdesde, como se indica a continuación:

show profile

Cuando está habilitado, el perfilador afecta el rendimiento de la base de datos, especialmente si se configura con un nivel de perfilado de 2 o si se utiliza un valor de umbral bajo con un nivel de perfilado 1 de. El perfilador también consume espacio en disco, ya que registra tanto system.profile en la colección como en MongoDB.logfile Considere cuidadosamente las implicaciones de rendimiento y seguridad antes de configurar y habilitar el perfilador en una implementación de producción.

La colección system.profile es una colección con tamaño fijo con un tamaño por defecto de 1 megabyte. Una colección de este tamaño, por lo general, puede almacenar varios miles de documentos de perfil, pero algunas aplicaciones pueden utilizar más o menos datos de creación de perfiles por operación. Si debes cambiar el tamaño de la colección system.profile, sigue los pasos descritos a continuación.

Para cambiar el tamaño de la colección system.profile en el primario, debes hacer lo siguiente:

  1. Inhabilitar la creación de perfiles.

  2. Descarta la colección system.profile.

  3. Crear una nueva colección system.profile.

  4. Vuelve a activar la creación de perfiles.

Por ejemplo, para crear una nueva colección system.profile que tenga 4000000 bytes (4 MB), utiliza la siguiente secuencia de operaciones en mongosh:

db.setProfilingLevel(0)
db.system.profile.drop()
db.createCollection( "system.profile", { capped: true, size:4000000 } )
db.setProfilingLevel(1)

Para cambiar el tamaño de la colección system.profile en un secundario, debes detener el secundario, ejecutarlo como autónomo y, a continuación, realizar los pasos anteriores. Cuando hayas terminado, reinicia el autónomo como nodo del set de réplicas. Para obtener más información, consulta Mantenimiento de los miembros del set de réplicas autogestionado.

[2](1, 2, 3) Los miembros secundarios de un set de réplicas ahora hacen un registro de las entradas del oplog que tardan más en aplicarse que el umbral de operación lenta. Mensajes lentos del oplog:
  • Se registran para los secundarios en el diagnostic log.
  • Se documentan en el registro bajo el componente REPL con el texto applied op: <oplog entry> took <num>ms.
  • No depende de los niveles de registro (ya sea a nivel del sistema o del componente)
  • No depende del nivel de perfil.
  • Se ven afectados por slowOpSampleRate.
El perfilador no captura entradas lentas del oplog.

Volver

Explique los resultados

En esta página