Aperçu
Nous travaillons toujours sur cette fonctionnalité, mais nous aimerions que vous l'essayiez !
Cette fonctionnalité est actuellement fournie dans le cadre d'un aperçu conformément à nos politiques de pré-sortie.
Monitorez les performances de votre base de données MySQL avec des métriques complètes collectées par le NRDOT Collector. Par défaut, New Relic collecte les métriques référencées dans la section Métriques par défaut. Vous pouvez améliorer votre monitoring en activant les métriques souhaitées listées dans la section Métriques supplémentaires.
Métriques supplémentaires
Les métriques suivantes sont désactivées par défaut, mais peuvent être activées pour obtenir des informations détaillées sur les performances et l'état de santé de MySQL. Ces métriques sont organisées par fonctionnalité et la plupart nécessitent une connexion MySQL directe.
Événements de log
db.server.query_sample
Visibilité en temps réel sur les instructions de base de données en cours d'exécution — un instantané ponctuel pris à chaque collecte, et non un log d'exécution complet. Désactivé par défaut.
| Attribut | Description |
|---|---|
db.system.name | mysql |
mysql.threads.thread_id | Identifiant unique pour le thread exécutant l'instruction |
mysql.session.id | PROCESSLIST_ID — l’ID de connexion visible via SHOW PROCESSLIST |
user.name | Utilisateur du thread de premier plan ; vide pour les threads d'arrière-plan |
db.namespace | Base de données actuelle du thread (processlist_db) |
mysql.threads.processlist_command | Type de commande, ou Sleep si inactif |
mysql.threads.processlist_state | Action/état actuel du thread |
db.query.text | Texte de l'instruction SQL |
mysql.events_statements_current.digest | Empreinte de l’instruction SHA-256 |
mysql.events_statements_current.timer_start | Compteur de picosecondes monotone marquant le début de l'instruction — une clé par exécution stable à travers les cycles de collecte |
mysql.events_statements_current.timer_wait | Temps d'exécution écoulé, en secondes |
mysql.events_waits_current.timer_wait | Temps d’attente écoulé, en secondes (nécessite le consommateur events_waits_current) |
mysql.wait_event_type | Classification d'attente de niveau supérieur dérivée du nom de l'événement d'attente (io, lock, synch), ou CPU/User sleep/other lorsqu'il n'y a pas d'attente réelle. Associé à mysql.wait_event. |
mysql.wait_event | Répartition détaillée de l'attente — le nom de l'événement d'attente avec son segment de catégorie supprimé (par exemple, table/sql/handler, mutex/innodb/checkpoint_state), ou CPU/User sleep/other lorsqu'il n'y a pas d'attente réelle. Associé à mysql.wait_event_type. |
mysql.wait_type | Nom brut et non traité de l’instrument qui a produit l’événement d’attente — pour la répartition analysée/catégorisée, voir mysql.wait_event_type / mysql.wait_event. |
mysql.session.status | waiting, running, ou other |
mysql.query_plan / mysql.query_plan.hash | Plan de requête, si disponible, et sa clé de cache |
mysql.event_id | Thread + numéro de l'événement actuel lorsque l'événement a commencé |
client.address / client.port | Hôte/port du client (port renseigné sur MySQL 8.0.22+ uniquement, sinon 0) |
network.peer.address / network.peer.port | Identique, comme attributs de couche réseau |
mysql.blocking.blockers | Éventail JSON de {thread_id, session_id} tuples, un par bloqueur de verrou de ligne InnoDB simultané pour cette session — pas seulement le premier, s’il en existe plus d’un. "[]" lorsqu’il n’est pas bloqué ; le session_id d’un bloqueur est null s’il s’est déconnecté avant de pouvoir être résolu. |
mysql.blocking.blocker.count | Nombre entier de bloqueurs simultanés. 0 signifie non bloqué. |
mysql.session.client_name | Identité auto-déclarée du pilote client (par exemple, MySQL Connector/J), provenant de session_connect_attrs. Vide si le pilote n'envoie pas d'attributs de connexion. |
db.query.comment_tags / .nr_service_guid | Tags de commentaire de corrélation APM — voir (Facultatif) Configurer la corrélation APM-base de données |
db.query.text.normalized.hash | MD5 du SQL normalisé pour la corrélation inter-moteurs |
Conseil
Filtrer le blocage avec mysql.blocking.blocker.count > 0, et non != 0 — null != 0 évalue TRUE dans NRQL, ce qui inclurait silencieusement les sessions non bloquées dans vos résultats.
db.server.top_query
Les requêtes consommant le plus de temps d’exécution, agrégées côté serveur par le propre performance_schema.events_statements_summary_by_digest de MySQL — un véritable compteur d’exécution par empreinte, et non un nombre d’échantillons. Désactivé par défaut.
| Attribut | Description |
|---|---|
db.system.name | mysql |
db.query.text | Texte de l’instruction SQL (obfusqué) |
db.namespace | Du digest SCHEMA_NAME |
mysql.events_statements_summary_by_digest.digest | Empreinte de l’instruction SHA-256 |
mysql.events_statements_summary_by_digest.count_star | Nombre de fois où l'instruction a été exécutée, rapporté comme un delta par collecte, non cumulatif |
mysql.events_statements_summary_by_digest.sum_timer_wait | Temps d’exécution total, delta en secondes |
mysql.events_statements_summary_by_digest.sum_rows_examined / .sum_rows_sent | Nombres de lignes delta — la division par count_star donne les moyennes par exécution. Il s’agit de nombres de lignes, et non de lectures logiques. |
mysql.query_plan / mysql.query_plan.hash | Plan de requête (via EXPLAIN), si disponible — voir Collecte du plan d'exécution |
db.query.comment_tags / .nr_service_guid | Identique à query_sample |
db.query.text.normalized.hash | Identique à query_sample |
Collecte du plan d’exécution
EXPLAIN nécessite une instruction SQL littérale — le texte de résumé normalisé utilise des espaces réservés (SELECT ? FROM t WHERE id = ?) que MySQL ne peut pas exécuter.
| Version de MySQL | Disponibilité du plan |
|---|---|
8.0.3+ | Disponible — query_sample_text sur la table de résumé digest contient une instruction réelle pour EXPLAIN |
5.x, 8.0.0–8.0.2 | Non disponible — aucun query_sample_text à expliquer |
Si une instruction capturée est tronquée (se termine par ...), EXPLAIN est ignoré sur chaque version — voir Paramètres de serveur recommandés.
explain_mode | Comportement |
|---|---|
inline (défaut) | Exécute EXPLAIN FORMAT=json <statement> directement — suffisant pour les workloads SELECTuniquement |
procedure | Passe par une procédure SQL SECURITY DEFINER (<schema>.explain_statement) afin que les instructions d'écriture (UPDATE/DELETE/INSERT/REPLACE) puissent être expliquées sans accorder de DML à l'utilisateur de monitoring. Se rabat sur inline si la procédure est manquante. Nécessite l'étape de configuration unique par schéma — voir Plans de requête pour les instructions d'écriture. |
Important
mysql.query_plan est la sortie EXPLAIN FORMAT=json brute, enveloppée dans un éventail JSON à un élément avant la mise en cache, afin que l’ingestion de log de New Relic ne l’aplatisse pas automatiquement et ne la détruise pas. Analysez l’index [0] pour récupérer l’objet plan.
Unités de temps
Type de télémétrie | Champs | Unité |
|---|---|---|
Événements de log (
,
) |
,
,
| secondes |
Métriques (événements d'instruction, attente d'I/O de table/index, attente de verrouillage de table) | par unité
: ns | nanosecondes |
Important
mysql.events_waits_current.timer_wait est le seul champ qui représente une durée d’attente/de blocage véritable et distincte (et non le temps écoulé total) — associez-le à mysql.wait_event_type / mysql.wait_event (ou au mysql.wait_type brut).
Documentation associée
Instrumentation dans les environnements auto-hébergés
Découvrez comment configurer le monitoring MySQL dans des environnements auto-hébergés avec New Relic.
Instrumentation dans les environnements RDS
Découvrez comment configurer le monitoring MySQL dans les environnements RDS avec New Relic.
Guide de dépannage
Apprenez à résoudre les problèmes courants liés au monitoring MySQL.