Monitoree el rendimiento de su base de datos MySQL con métricas exhaustivas recopiladas por el NRDOT Collector. De forma predeterminada, New Relic recopila las métricas a las que se hace referencia en la sección Métricas predeterminadas. Puede mejorar su monitoreo habilitando las métricas deseadas que se enumeran en la sección Métricas adicionales.
Métricas adicionales
Las siguientes métricas están deshabilitadas de forma predeterminada, pero se pueden habilitar para obtener información valiosa más detallada sobre el rendimiento y el estado de MySQL. Estas métricas están organizadas por funcionalidad y la mayoría requiere una conexión directa a MySQL.
Log de eventos
db.server.query_sample
Visibilidad en tiempo real de las sentencias de la base de datos actualmente en ejecución: una instantánea de un momento dado tomada en cada recopilación, no un log de ejecución completo. Deshabilitado por defecto.
| Atributo | Descripción |
|---|---|
db.system.name | mysql |
mysql.threads.thread_id | Identificador único para el hilo que ejecuta la sentencia |
mysql.session.id | PROCESSLIST_ID: el ID de la conexión visible a través de SHOW PROCESSLIST |
user.name | Usuario de hilo en primer plano; vacío para hilos en segundo plano |
db.namespace | Base de datos actual del hilo (processlist_db) |
mysql.threads.processlist_command | Tipo de comando, o Sleep si está inactivo |
mysql.threads.processlist_state | Acción/estado actual del hilo |
db.query.text | Texto de la sentencia SQL |
mysql.events_statements_current.digest | Resumen de sentencia SHA-256 |
mysql.events_statements_current.timer_start | Contador monotónico de picosegundos que marca el inicio de la instrucción: una clave estable por ejecución en los ciclos de extracción |
mysql.events_statements_current.timer_wait | Tiempo de ejecución transcurrido, en segundos |
mysql.events_waits_current.timer_wait | Tiempo de espera transcurrido, en segundos (requiere el consumidor events_waits_current) |
mysql.wait_event_type | Clasificación de espera de nivel superior derivada del nombre del evento de espera (io, lock, synch), o CPU/User sleep/other cuando no está realmente esperando. Emparejado con mysql.wait_event. |
mysql.wait_event | Desglose detallado de la espera: el nombre del evento de espera sin su segmento de categoría (por ejemplo, table/sql/handler, mutex/innodb/checkpoint_state), o CPU/User sleep/other cuando no está realmente en espera. Emparejado con mysql.wait_event_type. |
mysql.wait_type | Nombre sin procesar del instrumento que produjo el evento de espera. Para ver el desglose analizado/categorizado, consulte mysql.wait_event_type / mysql.wait_event. |
mysql.session.status | waiting, running, o other |
mysql.event_id | Hilo + número de evento actual cuando comenzó el evento |
client.address / client.port | Host/puerto del cliente (puerto completado solo en MySQL 8.0.22+, de lo contrario 0) |
network.peer.address / network.peer.port | Igual, como atributos de la capa de red |
mysql.blocking.blockers | Matriz JSON de tuplas de {thread_id, session_id}, una por cada bloqueador de bloqueo de fila de InnoDB simultáneo para esta sesión (no solo el primero, si existe más de uno). "[]" cuando no está bloqueado; el session_id de un bloqueador es null si se desconectó antes de que pudiera resolverse. |
mysql.blocking.blocker.count | Recuento entero de bloqueadores concurrentes. 0 significa que no está bloqueado. |
mysql.session.client_name | Identidad autodeclarada del controlador del cliente (por ejemplo, MySQL Connector/J), de session_connect_attrs. Vacío si el controlador no envía atributos de conexión. |
db.query.comment_tags / .nr_service_guid | Etiquetas de comentario de correlación de APM: consulte (Opcional) Configurar la correlación de APM y base de datos |
db.query.text.normalized.hash | MD5 de SQL normalizado para la correlación entre motores |
Sugerencia
Filtre el bloqueo con mysql.blocking.blocker.count > 0, no con != 0. null != 0 evalúa TRUE en NRQL, lo que incluiría silenciosamente sesiones no bloqueadas en los resultados.
db.server.top_query
Las consultas que consumen más tiempo de ejecución, agregadas del lado del servidor por el propio performance_schema.events_statements_summary_by_digest de MySQL: un verdadero contador de ejecución por digest, no un recuento de muestras. Deshabilitado por defecto.
| Atributo | Descripción |
|---|---|
db.system.name | mysql |
db.query.text | Texto de la sentencia SQL (ofuscado) |
db.namespace | Del resumen SCHEMA_NAME |
mysql.events_statements_summary_by_digest.digest | Resumen de sentencia SHA-256 |
mysql.events_statements_summary_by_digest.count_star | Veces que se ejecutó la sentencia, reportadas como un delta por extracción, no acumulativo |
mysql.events_statements_summary_by_digest.sum_timer_wait | Tiempo total de ejecución, segundos delta |
mysql.events_statements_summary_by_digest.sum_rows_examined / .sum_rows_sent | Recuentos de filas delta. Dividir entre count_star proporciona promedios por ejecución. Estos son recuentos de filas, no lecturas lógicas. |
db.query.comment_tags / .nr_service_guid | Igual que query_sample |
db.query.text.normalized.hash | Igual que query_sample |
db.server.query_plan
Plan de ejecución de una sentencia, reportado como su propio evento para que el plan pueda filtrarse, enrutarse o descartarse independientemente de las estadísticas propias de top_query/query_sample. Requiere que al menos uno de db.server.top_query o db.server.query_sample también esté habilitado. Una vez habilitado, mysql.query_plan ya no se incluye en los registros de db.server.top_query/db.server.query_sample. Consulte Recopilación del plan de ejecución para conocer el funcionamiento de EXPLAIN.
| Atributo | Descripción |
|---|---|
db.system.name | mysql |
db.namespace | La base de datos/esquema predeterminado para la consulta. En las muestras de consultas esta es la base de datos actual del hilo (processlist_db); en las consultas principales es el SCHEMA_NAME del resumen. Vacío cuando no se seleccionó ninguna base de datos predeterminada. |
mysql.query_plan.hash | Establecido en el mismo valor que mysql.events_statements_summary_by_digest.digest (resumen de la consulta) por diseño |
mysql.query_plan.source | El evento para el que se informó el plan (db.server.top_query o db.server.query_sample), de modo que los planes se puedan enrutar o descartar por evento de origen |
mysql.query_plan | El plan de consulta para la sentencia, si está disponible |
Recopilación del plan de ejecución
EXPLAIN necesita una sentencia SQL literal: el texto de resumen normalizado usa marcadores de posición (SELECT ? FROM t WHERE id = ?) que MySQL no puede ejecutar.
| Versión de MySQL | Disponibilidad del plan |
|---|---|
8.0.3+ | Disponible: query_sample_text en la tabla de resumen contiene una sentencia real para EXPLAIN |
5.x, 8.0.0–8.0.2 | No disponible: no hay query_sample_text para explicar |
Si una instrucción capturada se trunca (termina en ...), EXPLAIN se omite en todas las versiones. Consulte Parámetros de servidor recomendados.
explain_mode | Comportamiento |
|---|---|
inline (por defecto) | Ejecuta EXPLAIN FORMAT=json <statement> directamente; suficiente para cargas de trabajo de solo SELECT |
procedure | Enruta a través de un procedimiento SQL SECURITY DEFINER (<schema>.explain_statement) para que las sentencias de escritura (UPDATE/DELETE/INSERT/REPLACE) se puedan explicar sin otorgar DML al usuario de monitoreo. Recurre a inline si falta el procedimiento. Requiere el paso de configuración única por esquema. Consulte Planes de consulta para sentencias de escritura. |
Importante
mysql.query_plan es la salida EXPLAIN FORMAT=json sin procesar, envuelta en una matriz JSON de un elemento antes del almacenamiento en caché, para que la ingesta de logs de New Relic no la aplane automáticamente y la destruya. Analice el índice [0] para recuperar el objeto del plan.
Unidades de temporizador
Tipo de telemetría | Campos | Unidad |
|---|---|---|
Log de eventos (
,
) |
,
,
| segundos |
Métricas (eventos de declaración, espera de I/O de tabla/índice, espera de bloqueo de tabla) | por unidad de
: ns | nanosegundos |
Importante
mysql.events_waits_current.timer_wait es el único campo que es una duración de espera/bloqueo genuina y distinta (no el tiempo total transcurrido). Emparéjelo con mysql.wait_event_type / mysql.wait_event (o el mysql.wait_type sin procesar).
Documentación relacionada
Instrumentación en entornos autohospedados
Aprenda a configurar el monitoreo de MySQL en entornos autohospedados con New Relic.
Instrumentación en entornos RDS
Aprenda a configurar el monitoreo de MySQL en entornos RDS con New Relic.
Guía de solución de problemas
Aprenda a solucionar problemas comunes con el monitoreo de MySQL.