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é stable par exécution à 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 des attentes : le nom de l’événement d’attente sans son segment de catégorie (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, consultez mysql.wait_event_type / mysql.wait_event. |
mysql.session.status | waiting, running, ou other |
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
Filtrez le blocage avec mysql.blocking.blocker.count > 0, et non != 0. null != 0 évalue TRUE en 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 digest, 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. Diviser par count_star donne les moyennes par exécution. Ce sont des nombres de lignes, et non des lectures logiques. |
db.query.comment_tags / .nr_service_guid | Identique à query_sample |
db.query.text.normalized.hash | Identique à query_sample |
db.server.query_plan
Plan d’exécution pour une instruction, signalé comme son propre événement afin que le plan puisse être filtré, routé ou supprimé indépendamment des statistiques propres à top_query/query_sample. Nécessite qu’au moins db.server.top_query ou db.server.query_sample soit également activé. Une fois activé, mysql.query_plan n’est plus inclus dans les enregistrements db.server.top_query/db.server.query_sample. Consultez Collecte du plan d’exécution pour les mécanismes de EXPLAIN.
| Attribut | Description |
|---|---|
db.system.name | mysql |
db.namespace | La base de données / le schéma par défaut pour la requête. Dans les échantillons de requêtes, il s’agit de la base de données actuelle du thread (processlist_db) ; dans les requêtes principales, il s’agit du SCHEMA_NAME du digest. Vide lorsqu’aucune base de données par défaut n’a été sélectionnée. |
mysql.query_plan.hash | Défini sur la même valeur que mysql.events_statements_summary_by_digest.digest (digest de la requête) par conception |
mysql.query_plan.source | L'événement pour lequel le plan a été signalé (db.server.top_query ou db.server.query_sample), afin que les plans puissent être routés ou rejetés par événement source |
mysql.query_plan | Le plan de requête pour l'instruction, si disponible |
Collecte du plan d’exécution
EXPLAIN nécessite une instruction SQL littérale : le texte de condensé 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 dans la table de résumé du condensé contient une véritable instruction 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. Consultez 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 est une durée d’attente/blocage véritable et distincte (et non le temps total écoulé). Associez-le avec mysql.wait_event_type / mysql.wait_event (ou le 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.