Avance
Todavía estamos trabajando en esta característica, ¡pero nos encantaría que la probaras!
Esta función se proporciona actualmente como parte de una vista previa de conformidad con nuestras políticas de prelanzamiento.
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 extracció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 monótono de picosegundos que marca el inicio de la sentencia — una clave estable por ejecución a través de 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.query_plan / mysql.query_plan.hash | Plan de consulta, si está disponible, y su clave de caché |
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 {thread_id, session_id} tuplas, una por bloqueador concurrente de bloqueo de fila de InnoDB 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 comentarios 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 sus resultados.
db.server.top_query
Las consultas que consumen la mayor parte del 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 resumen, 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 por count_star da promedios por ejecución. Estos son recuentos de filas, no lecturas lógicas. |
mysql.query_plan / mysql.query_plan.hash | Plan de consulta (a través de EXPLAIN), si está disponible — consulte Recopilación del plan de ejecución |
db.query.comment_tags / .nr_service_guid | Igual que query_sample |
db.query.text.normalized.hash | Igual que query_sample |
Recopilación del plan de ejecución
EXPLAIN necesita una declaración 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 de digest contiene una declaración real para EXPLAIN |
5.x, 8.0.0–8.0.2 | No disponible — no hay query_sample_text para explicar |
Si una sentencia 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 workloads 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) puedan explicarse 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) — combínelo 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.