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:
$queryStats(etapa de agregación)
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 Comandos de Base de Datos ejecutados contra una instancia en ejecución de mongod. Esto incluye las operaciones CRUD, así como los comandos de configuración y administración.
El perfilador escribe todos los datos que recoge en una colección system.profile, una colección con tamaño fijo en cada base de datos perfilada. Consulta Salida del perfilador de base de datos para obtener una visión general de los documentos system.profile 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.
Esta página muestra opciones importantes de administración para el perfilador de bases de datos. Para obtener más información, consulta:
Niveles de creación de perfiles
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.
1El perfilador recopila datos para operaciones que tomen más tiempo que el valor de
slowmso que coincidan con un filtro.Cuando se establece un filtro:
Las opciones
slowmsysampleRateno 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 paraslowmsyfilter.
Activar y configurar la creación de perfiles de bases de datos
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:
Para activar la creación de perfiles al inicio, se debe configurar
operationProfiling.modeen el archivo de configuración.Para habilitar la creación de perfiles durante el tiempo de ejecución, utilice el
mongoshmétododb.setProfilingLevel()auxiliar.Para activar la creación de perfiles con un controlador, usa un método del controlador.
El perfilador registra datos en la colección system.profile. MongoDB crea la colección system.profile en una base de datos después de activar la creación de perfiles para esa base de 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 y establecer el nivel de perfilado, pase el nivel de perfilado a la db.setProfilingLevel() función auxiliar. Por ejemplo, para habilitar la creación de perfiles para todas las operaciones de base de datos de la base de datos actualmente conectada, ejecute esta operación mongosh en:
db.setProfilingLevel(2)
El shell devuelve el nivel de perfil anterior en el campo was y establece el nuevo nivel. En la siguiente salida, el par clave-valor "ok" : 1 indica que la operación fue exitosa:
{ "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 la base level slowmsdesampleRate datos,, o filter mediante el profile comando o db.setProfilingLevel() el método de envoltura se registran en log file el.
Configuraciones de perfilado globales y por base de datos
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 configuran mediante el profile comando o db.setProfilingLevel() el método auxiliar de shell, elnivel de perfilado y la configuración de filtros 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 filter la configuración afectan a todo el proceso.
Especifique el umbral para las operaciones lentas
Por defecto, el umbral de operaciones lentas es de 100 milisegundos. Para cambiar el umbral de operación lenta, especifica el valor de umbral requerido de una de las siguientes formas:
Establece el valor de
slowmsusando el comandoprofileo el método asistente de shelldb.setProfilingLevel().Establece el valor de
--slowmsdesde la línea de comandos al inicio.Establece el valor de
slowOpThresholdMsen un archivo de configuración.
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 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.
Puedes usar db.setProfilingLevel() para configurar slowms y sampleRate para mongos. Para mongos, las configuraciones slowms y sampleRate solo afectan al registro de diagnóstico y no al perfilador, ya que la creación de perfiles 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:
queryHashpara ayudar a identificar consultas lentas con la misma forma del query.planCacheKeypara 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
REPLcon el textoapplied 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.
Perfila una muestra aleatoria de operaciones lentas
Para perfilar solo un subconjunto aleatorio de todas las Operaciones lentas, especifique la tasa de muestra deseada de una de las siguientes maneras: [2]
Establece el valor de
sampleRateusando el comandoprofileo el método asistente de shelldb.setProfilingLevel().Establece el valor de
--slowOpSampleRateparamongodo--slowOpSampleRateparamongosdesde la línea de comandos al inicio.Establece el valor de
slowOpSampleRateen un archivo de configuración.
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.
En el siguiente ejemplo, se configura el nivel de creación de perfiles para la base de datos conectada actualmente a 1 y se configura el perfilador para que muestree 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.
Puedes usar db.setProfilingLevel() para configurar slowms y sampleRate para mongos. Para mongos, los ajustes de configuración de slowms y sampleRate solo afectan al registro de diagnóstico y no al perfilador porque la creación de perfiles no está disponible en mongos. [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. |
Configura un filtro para determinar las operaciones perfiladas
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:
Establece el valor de
filterusando el comandoprofileo el método asistente de shelldb.setProfilingLevel().Establece el valor de
filteren un archivo de configuración.
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.
El siguiente db.setProfilingLevel() ejemplo establece el nivel de perfil para la base de datos actualmente conectada:
el nivel de perfilado a
1,el filtro de
{ op: "query", millis: { $gt: 2000 } }, que genera que el perfilador solo registrequeryoperaciones que tomaron más de 2 segundos.
db.setProfilingLevel( 1, { filter: { op: "query", millis: { $gt: 2000 } } } )
Comprueba el nivel de creación de perfiles
Para ver el nivel de perfilado, ejecute el siguiente ejemplo mongosh en:
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.
Inhabilitar la creación de perfiles
Para deshabilitar el análisis de perfiles, ejecute el siguiente ejemplo mongosh en:
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 .
Activa la creación de perfiles para una instancia mongod completa
Para entornos de desarrollo y prueba, puedes activar la creación de perfiles de bases de datos para toda una instancia mongod. El nivel de creación de perfiles se aplica a todas las bases de datos proporcionadas por la instancia mongod.
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]
slowms y slowOpSampleRate también afectan las operaciones que se registran en el registro de diagnóstico cuando logLevel está configurado en 0. slowms y slowOpSampleRate también están disponibles para configurar el registro de diagnóstico para mongos. [2]
Perfilado y fragmentación de bases de datos
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.
Ver datos del perfilador
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 una 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.
Queries de datos de ejemplo del perfilador
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.
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 que tarden más de 5 milisegundos en completarse, ejecuta:
db.system.profile.find( { millis : { $gt : 5 } } ).pretty()
Para devolver operaciones para un rango de tiempo específico, ejecuta:
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 } )
Muestra los cinco eventos más recientes
En una base de datos con la función de perfilado habilitada, el show profile asistente en muestra mongosh las 5 operaciones más recientes que tardaron al menos 1 milisegundos en ejecutarse. Ejecutar show profile mongoshdesde:
show profile
Gastos en general del perfilador
Cuando está habilitada, la creación de perfiles afecta al rendimiento de la base de datos, especialmente cuando se configura con un nivel de 2 creación de perfiles de, o cuando se utiliza un valor umbral bajo con un nivel de creación de perfiles 1 de.
La creación de perfiles también utiliza espacio en disco porque guarda registros en la colección system.profile y en MongoDB logfile.
Advertencia
Considera las implicaciones de rendimiento y almacenamiento antes de activar el perfilador en una implementación de producción.
La colección system.profile
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.
Cambia el tamaño de la colección system.profile en el primario
Para cambiar el tamaño de la colección system.profile en el primario, debes hacer lo siguiente:
Inhabilitar la creación de perfiles.
Descarta la colección
system.profile.Crear una nueva colección
system.profile.Vuelve a activar la creación de perfiles.
Por ejemplo, para crear una nueva colección que system.profile sea 4000000 bytes (4 MB), utilice la siguiente secuencia de operaciones mongosh en:
db.setProfilingLevel(0) db.system.profile.drop() db.createCollection( "system.profile", { capped: true, size:4000000 } ) db.setProfilingLevel(1)
Cambia el tamaño de la colección system.profile en un secundario
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 registran entradas de oplog que tardan más que el umbral de una operación lenta en aplicarse. Estos mensajes lentos del oplog:
El perfilador no captura entradas lentas del oplog. |