Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Database Profiler

Advertencia

El perfilador de bases de datos puede degradar el rendimiento de MongoDB. Antes de activar el perfilador de base de datos, considera usar una de las siguientes alternativas:

Para aprender más sobre el impacto en el rendimiento del perfilador de base de datos, consulte Gastos en general del perfilador.

El perfilador de base de datos recopila información detallada sobre los comando de base de datos ejecutados en una instancia en ejecución de mongod, incluyendo operaciones CRUD y comandos de administración.

El generador de perfiles escribe datos en la system.profile colección, una colección con límite de tamaño en cada base de datos analizada. Consulte la sección Salida del generador de perfiles de base de datos para obtener una descripción general de los documentos que crea.

El perfilador está off por defecto. Puedes habilitarlo por base de datos o por instancia en uno de los varios niveles de perfilado. Cuando está habilitado, la creación de perfiles afecta el rendimiento de la base de datos y el uso del disco. Consulte Sobrecarga del Perfilador de Base de Datos.

Esta página documenta opciones importantes de administración del perfilador de base de datos. Para obtener información adicional, consulta:

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.

Cuando se establece en el nivel 2, el perfilador ignora los valores proporcionados por el usuario para slowms y filter.

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

Para activar la creación de perfiles, usa uno de los siguientes métodos:

MongoDB crea la colección system.profile en una base de datos después de que habilitas la creación de perfiles para esa base de datos. El perfilador utiliza esta colección para registrar datos.

Para activar la creación de perfiles de una instancia mongod al inicio, se debe establecer operationProfiling.mode en el archivo de configuración al nivel de registro que se prefiera.

Para habilitar la creación de perfiles para todas las operaciones en la base de datos actualmente conectada, ejecute en mongosh:

db.setProfilingLevel(2)

El shell devuelve el nivel de perfilado anterior en was y establece el nuevo nivel. "ok" : 1 indica éxito:

{ "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.

slowms y sampleRate son configuraciones globales que afectan a todas las bases de datos en el proceso.

The Nivel de perfilado y el filtro son configuraciones a nivel de base de datos cuando se establecen con profile o db.setProfilingLevel(). Cuando se configuran como opciones de línea de comandos o archivo de configuración, afectan a todo el proceso.

Por defecto, el umbral para operaciones lentas es de 100 milisegundos.

Las operaciones lentas se registran en función de workingMillis, que es la cantidad de tiempo que MongoDB dedica a trabajar en esa operación. Esto significa que factores como la espera de bloqueos y el control de flujo no afectan si una operación supera el umbral de operación lenta.

Para cambiar el umbral de lentitud de la operación, utilice uno de los siguientes:

El siguiente ejemplo establece el nivel de creación de perfiles para la base de datos conectada actualmente a 1 y establece el umbral de operación lenta para la instancia mongod en 20 milisegundos:

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

Un nivel de creación de perfiles de 1 hace que el perfilador registre operaciones más lentas que el umbral de slowms.

Importante

El umbral de operación lenta se aplica a todas las bases de datos en una mongod instancia. Lo utilizan tanto el generador de perfiles de base de datos como el registro de diagnóstico. Configúrelo al valor útil más alto para evitar la degradación del rendimiento.

Para mongos, utiliza db.setProfilingLevel() para configurar slowms y sampleRate. Estas configuraciones solo afectan el registro de diagnóstico en mongos, no al perfilador. El perfilado no está disponible en mongos. [1]

El siguiente ejemplo establece el umbral de operación lenta de una instancia mongos para registrar operaciones lentas en 20:

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:

  • planCacheShapeHash para ayudar a identificar queries lentos con la misma forma del query de caché de planes.

    A partir de MongoDB 8.0, el campo queryHash existente se duplica en un nuevo campo llamado planCacheShapeHash. Si estás utilizando una versión anterior de MongoDB, solo verás el campo queryHash. Las versiones futuras de MongoDB removerán el campo queryHash obsoleto y deberás utilizar el campo planCacheShapeHash en su lugar.

  • planCacheKey para proporcionar más perspectiva sobre la caché del plan del query para queries lentos.

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.

Para perfilar solo un subconjunto muestreado al azar de operaciones lentas, establezca sampleRate de una de las siguientes maneras: [2]

Por defecto, sampleRate se establece en 1.0, lo que significa que se perfilan todas las operaciones lentas. Cuando sampleRate se establece entre 0 y 1, las bases de datos con un nivel de creación de perfiles 1 solo perfilan un porcentaje de operaciones lentas seleccionado aleatoriamente basado en sampleRate.

El siguiente ejemplo establece el nivel de creación de perfiles en 1 y configura los perfiles para muestrear el 42% de 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.

Para mongos, slowms y sampleRate afectan sólo al registro de diagnóstico, no al perfilador. [1] Para configurar la tasa de muestreo para el mongos registro:

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.

Para controlar qué operaciones se perfilan y registran, establece un filtro de una de las siguientes maneras:

Para mongod, filter afecta tanto al registro de diagnóstico como al perfilador, si están habilitados. Para mongos, filter sólo afecta al registro de diagnóstico.

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.

El siguiente ejemplo establece el nivel de perfilado 1 con un filtro que solo registra query operaciones que tardan más de 2 segundos:

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

Para visualizar el nivel de perfilado, ejecuta en mongosh:

db.getProfilingStatus()

El shell devuelve un documento similar al siguiente:

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

El documento devuelto contiene:

  • was: nivel de perfilado actual.

  • slowms: operation time threshold en milisegundos.

  • sampleRateporcentaje de operaciones lentas siendo perfiladas.

Para desactivar la creación de perfiles, ejecútalo en mongosh:

db.setProfilingLevel(0)

Nota

Si se desactiva el perfilado, se puede mejorar el rendimiento de la base de datos y reducir el uso del disco. Para obtener más información, consulta Gastos en general del perfilador de base de datos .

Para entornos de desarrollo y prueba, puede habilitar la creación de perfiles para una mongod instancia completa de. El nivel de creación de perfiles se aplica a todas las bases de datos de esa instancia.

Pase las siguientes opciones a al mongod iniciar:

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

Como alternativa, especifique operationProfiling en el archivo de configuración.

Esto establece el nivel de perfilado 1, define las operaciones lentas como aquellas que duran más de 15 milisegundos y perfila el 50% de las operaciones lentas. [2]

slowms y slowOpSampleRate también afecta a las operaciones registradas en el registro de diagnóstico cuando logLevel está 0. Ambas configuraciones también configuran el registro de diagnósticos para mongos. [2]

Tip

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

Puede configurar --slowms y slowOpSampleRate en mongos para configurar el registro de diagnóstico para operaciones lentas.

El perfilador registra las operaciones de la base de datos en la colección system.profile. Query esa colección para ver los datos de perfilado. Por ejemplo, consulta Ejemplo de queries de datos de perfilador. Para obtener detalles sobre la salida, consulte Salida del perfilador de base de datos.

No puedes realizar ninguna operación, incluidas lecturas, en la system.profile colección desde dentro de una transacción.

Esta sección muestra queries de ejemplo en la colección system.profile. Para obtener detalles de la salida de la query, consulta Salida del perfilador de base de datos.

Devuelve las entradas de registro más recientes 10:

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

Devuelve todas las operaciones excepto las operaciones de comando ($cmd):

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

Devolver operaciones para una colección específica (este ejemplo usa mydb.test):

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

Operaciones de retorno que toman más de 5 milisegundos:

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

Operaciones de retorno en un intervalo de tiempo específico:

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

Devuelve operaciones en un rango de tiempo, excluye el campo user y ordena por duració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 que tenga activado el perfilado, el asistente show profile en mongosh muestra las 5 operaciones más recientes que tardaron al menos 1 milisegundo en ejecutarse. Ejecuta show profile desde mongosh:

show profile

Cuando se activa, el perfilado afecta al rendimiento de la base de datos, especialmente en el nivel de perfilado 2 o al utilizar un umbral bajo de slowms en el nivel 1. El perfilado también utiliza espacio en disco, porque escribe en la colección system.profile y en la base de datos MongoDB logfile.

Advertencia

Considera las implicaciones de rendimiento y almacenamiento antes de activar el perfilador en una implementación de producción.

La system.profile colección tiene un tamaño máximo 1 predeterminado de megabytes, que normalmente puede almacenar varios miles de documentos de perfil. Si necesita cambiar el tamaño, siga los pasos que se indican a continuación.

Para cambiar el tamaño de la colección system.profile en la primaria:

  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 system.profile colección de 4000000 bytes (4 MB) 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 una secundaria, detén la secundaria, ejecútala como autónomo y realiza los pasos anteriores. Luego, reinícialo como miembro del set de réplicas. Para obtener más información, consulte Realizar mantenimiento en miembros del set de réplicas autogestionados.

[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

Explicar las consultas lentas

En esta página