Performance Agent est un plug-in PolarDB for MySQL qui écrit des statistiques de performance au niveau du nœud dans une table en mémoire, selon un intervalle configurable. Interrogez directement cette table via SQL ou connectez-la à une plateforme de supervision telle que Grafana pour suivre en temps réel le processeur, la mémoire, les E/S, les connexions et les métriques du moteur InnoDB.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster PolarDB for MySQL 8.0 en version de révision 8.0.2.1.0 ou ultérieure. Pour vérifier la version, consultez Interroger la version du moteur.
Le paramètre
loose_performance_schemadéfini surON. Pour le mettre à jour, consultez Spécifier les paramètres du cluster et du nœud.
Fonctionnement
Performance Agent collecte les données de performance selon un intervalle configurable et écrit chaque snapshot sous forme de ligne dans la table mémoire PERF_STATISTICS de la base de données système performance_schema. Cette table conserve les données de performance générées durant la période la plus récente.
L'activation de performance_schema permet de superviser les verrous, les transactions et les métriques mémoire. Toutefois, elle consomme une quantité importante de mémoire système et peut affecter les performances du cluster. Elle est désactivée par défaut dans PolarDB for MySQL. Si vous l'activez, configurez uniquement les métriques nécessaires en fonction des spécifications de votre cluster et des ressources disponibles.
Paramètres
| Paramètre | Description | Valeur par défaut |
|---|---|---|
performance_agent_enabled |
Active ou désactive Performance Agent. Valeurs valides : ON, OFF. |
ON |
performance_agent_interval |
Fréquence de collecte des données par Performance Agent. Valeurs valides : 1–60. Unité : secondes. | 1 |
performance_agent_perfstat_volume_size |
Nombre maximal de lignes dans la table PERF_STATISTICS. |
3600 |
Avec les valeurs par défaut (interval = 1, volume_size = 3600), la table conserve environ une heure de données.
Pour modifier ces paramètres, consultez Spécifier les paramètres du cluster et du nœud.
Table PERF_STATISTICS
Schéma
CREATE TEMPORARY TABLE `PERF_STATISTICS` (
`TIME` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`PROCS_MEM_USAGE` double NOT NULL DEFAULT '0',
`PROCS_CPU_RATIO` double NOT NULL DEFAULT '0',
`PROCS_IOPS` double NOT NULL DEFAULT '0',
`PROCS_IO_READ_BYTES` bigint(21) NOT NULL DEFAULT '0',
`PROCS_IO_WRITE_BYTES` bigint(21) NOT NULL DEFAULT '0',
`MYSQL_CONN_ABORT` int(11) NOT NULL DEFAULT '0',
`MYSQL_CONN_CREATED` int(11) NOT NULL DEFAULT '0',
`MYSQL_USER_CONN_COUNT` int(11) NOT NULL DEFAULT '0',
`MYSQL_CONN_RUNNING` int(11) NOT NULL DEFAULT '0',
`MYSQL_LOCK_IMMEDIATE` int(11) NOT NULL DEFAULT '0',
`MYSQL_LOCK_WAITED` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_INSERT` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_UPDATE` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_DELETE` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_SELECT` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_COMMIT` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_ROLLBACK` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_PREPARE` int(11) NOT NULL DEFAULT '0',
`MYSQL_LONG_QUERY` int(11) NOT NULL DEFAULT '0',
`MYSQL_TCACHE_GET` bigint(21) NOT NULL DEFAULT '0',
`MYSQL_TCACHE_MISS` bigint(21) NOT NULL DEFAULT '0',
`MYSQL_TMPFILE_CREATED` int(11) NOT NULL DEFAULT '0',
`MYSQL_TMP_TABLES` int(11) NOT NULL DEFAULT '0',
`MYSQL_TMP_DISKTABLES` int(11) NOT NULL DEFAULT '0',
`MYSQL_SORT_MERGE` int(11) NOT NULL DEFAULT '0',
`MYSQL_SORT_ROWS` int(11) NOT NULL DEFAULT '0',
`MYSQL_BYTES_RECEIVED` bigint(21) NOT NULL DEFAULT '0',
`MYSQL_BYTES_SENT` bigint(21) NOT NULL DEFAULT '0',
`MYSQL_BINLOG_OFFSET` int(11) NOT NULL DEFAULT '0',
`MYSQL_IOLOG_OFFSET` int(11) NOT NULL DEFAULT '0',
`MYSQL_RELAYLOG_OFFSET` int(11) NOT NULL DEFAULT '0',
`EXTRA` json NOT NULL DEFAULT 'null'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Référence des colonnes
Les colonnes sont regroupées par domaine fonctionnel.
Ressources système
| Colonne | Description |
|---|---|
TIME |
Horodatage de la ligne. Format : yyyy-MM-dd HH:mm:ss. |
PROCS_MEM_USAGE |
Mémoire physique utilisée par le cluster. Unité : octets. |
PROCS_CPU_RATIO |
Taux d'utilisation du processeur. |
PROCS_IOPS |
Nombre d'opérations d'E/S effectuées. |
PROCS_IO_READ_BYTES |
Données lues par les opérations d'E/S. Unité : octets. |
PROCS_IO_WRITE_BYTES |
Données écrites par les opérations d'E/S. Unité : octets. |
Connexions et sessions
| Colonne | Description |
|---|---|
MYSQL_CONN_ABORT |
Nombre de connexions fermées. |
MYSQL_CONN_CREATED |
Nombre de nouvelles connexions. |
MYSQL_USER_CONN_COUNT |
Nombre total de connexions. |
MYSQL_CONN_RUNNING |
Nombre de connexions actives. |
Verrous
| Colonne | Description |
|---|---|
MYSQL_LOCK_IMMEDIATE |
Nombre de verrous détenus. |
MYSQL_LOCK_WAITED |
Nombre d'événements d'attente de verrou. |
Instructions SQL
| Colonne | Description |
|---|---|
MYSQL_COM_INSERT |
Nombre d'instructions INSERT exécutées. |
MYSQL_COM_UPDATE |
Nombre d'instructions UPDATE exécutées. |
MYSQL_COM_DELETE |
Nombre d'instructions DELETE exécutées. |
MYSQL_COM_SELECT |
Nombre d'instructions SELECT exécutées. |
MYSQL_COM_COMMIT |
Nombre de transactions validées explicitement. |
MYSQL_COM_ROLLBACK |
Nombre de transactions annulées. |
MYSQL_COM_PREPARE |
Nombre d'instructions préparées. |
MYSQL_LONG_QUERY |
Nombre de requêtes lentes. |
Cache et objets temporaires
| Colonne | Description |
|---|---|
MYSQL_TCACHE_GET |
Nombre de succès de cache. |
MYSQL_TCACHE_MISS |
Nombre d'échecs de cache. |
MYSQL_TMPFILE_CREATED |
Nombre de fichiers temporaires créés. |
MYSQL_TMP_TABLES |
Nombre de tables temporaires créées. |
MYSQL_TMP_DISKTABLES |
Nombre de tables temporaires sur disque créées. |
Opérations de tri
| Colonne | Description |
|---|---|
MYSQL_SORT_MERGE |
Nombre de fusions et tris de données. |
MYSQL_SORT_ROWS |
Nombre de lignes triées. |
Réseau et réplication
| Colonne | Description |
|---|---|
MYSQL_BYTES_RECEIVED |
Données reçues par le nœud. Unité : octets. |
MYSQL_BYTES_SENT |
Données envoyées par le nœud. Unité : octets. |
MYSQL_BINLOG_OFFSET |
Taille du fichier journal binaire généré. Unité : octets. |
MYSQL_IOLOG_OFFSET |
Taille du fichier journal binaire envoyé par le nœud principal. Unité : octets. |
MYSQL_RELAYLOG_OFFSET |
Taille du fichier journal binaire appliqué par le nœud en lecture seule. Unité : octets. |
Moteur InnoDB (colonne EXTRA)
La colonne EXTRA stocke les statistiques du moteur InnoDB sous forme d'objet JSON. Les valeurs correspondent à celles retournées par SHOW STATUS.
Utilisez des expressions de chemin JSON pour extraire des champs individuels :
SELECT TIME, EXTRA->'$.INNODB_ROWS_READ', EXTRA->'$.INNODB_ROWS_INSERTED'
FROM performance_schema.PERF_STATISTICS
ORDER BY TIME DESC
LIMIT 30;
| Champ | Description |
|---|---|
INNODB_TRX_CNT |
Nombre de transactions. |
INNODB_DATA_READ |
Données lues. Unité : octets. |
INNODB_IBUF_SIZE |
Nombre de pages fusionnées. |
INNODB_LOG_WAITS |
Nombre d'attentes d'InnoDB pour l'écriture des données de journal. |
INNODB_MAX_PURGE |
Nombre de transactions supprimées. |
INNODB_N_WAITING |
Nombre de verrous attendus par InnoDB. |
INNODB_ROWS_READ |
Nombre de lignes lues. |
INNODB_LOG_WRITES |
Nombre d'écritures de données de journal par InnoDB. |
INNODB_IBUF_MERGES |
Nombre de fusions de données effectuées par InnoDB. |
INNODB_DATA_WRITTEN |
Données écrites. Unité : octets. |
INNODB_DBLWR_WRITES |
Nombre d'opérations d'écriture double. |
INNODB_IBUF_SEGSIZE |
Taille des données insérées dans le tampon d'insertion. |
INNODB_ROWS_DELETED |
Nombre de lignes supprimées. |
INNODB_ROWS_UPDATED |
Nombre de lignes mises à jour. |
INNODB_COMMIT_TRXCNT |
Nombre de transactions validées. |
INNODB_IBUF_FREELIST |
Longueur de la liste inactive. |
INNODB_MYSQL_TRX_CNT |
Nombre de transactions MySQL. |
INNODB_ROWS_INSERTED |
Nombre de lignes insérées. |
INNODB_ACTIVE_TRX_CNT |
Nombre de transactions actives. |
INNODB_OS_LOG_WRITTEN |
Données de journal écrites sur le disque. Unité : octets. |
INNODB_ACTIVE_VIEW_CNT |
Nombre de vues actives. |
INNODB_RSEG_HISTORY_LEN |
Longueur de la table TRX_RSEG_HISTORY. |
INNODB_AVG_COMMIT_TRXTIME |
Temps moyen de validation d'une transaction. |
INNODB_MAX_COMMIT_TRXTIME |
Temps maximal de validation d'une transaction. |
INNODB_DBLWR_PAGES_WRITTEN |
Nombre de pages écrites par les opérations d'écriture double. |
Exemples de requêtes
Tous les exemples interrogent performance_schema.PERF_STATISTICS et trient les résultats par TIME DESC.
Récupérer des snapshots bruts
Interrogez l'utilisation du processeur et de la mémoire pour les 30 dernières secondes :
MySQL> SELECT TIME, PROCS_MEM_USAGE, PROCS_CPU_RATIO
FROM performance_schema.PERF_STATISTICS
ORDER BY TIME DESC
LIMIT 30;
+---------------------+-----------------+-----------------+
| TIME | PROCS_MEM_USAGE | PROCS_CPU_RATIO |
+---------------------+-----------------+-----------------+
| 2020-02-27 11:15:36 | 857812992 | 18.55 |
| 2020-02-27 11:15:35 | 857808896 | 18.54 |
| 2020-02-27 11:15:34 | 857268224 | 19.64 |
| 2020-02-27 11:15:33 | 857268224 | 21.06 |
| 2020-02-27 11:15:32 | 857264128 | 20.39 |
| 2020-02-27 11:15:31 | 857272320 | 20.32 |
| 2020-02-27 11:15:30 | 857272320 | 21.35 |
| 2020-02-27 11:15:29 | 857272320 | 28.8 |
| 2020-02-27 11:15:28 | 857268224 | 29.08 |
| 2020-02-27 11:15:27 | 857268224 | 26.92 |
| 2020-02-27 11:15:26 | 857268224 | 23.84 |
| 2020-02-27 11:15:25 | 857264128 | 13.76 |
| 2020-02-27 11:15:24 | 857264128 | 15.12 |
| 2020-02-27 11:15:23 | 857264128 | 14.76 |
| 2020-02-27 11:15:22 | 857264128 | 15.38 |
| 2020-02-27 11:15:21 | 857260032 | 13.23 |
| 2020-02-27 11:15:20 | 857260032 | 12.75 |
| 2020-02-27 11:15:19 | 857260032 | 12.17 |
| 2020-02-27 11:15:18 | 857255936 | 13.22 |
| 2020-02-27 11:15:17 | 857255936 | 20.51 |
| 2020-02-27 11:15:16 | 857255936 | 28.74 |
| 2020-02-27 11:15:15 | 857251840 | 29.85 |
| 2020-02-27 11:15:14 | 857251840 | 29.31 |
| 2020-02-27 11:15:13 | 856981504 | 28.85 |
| 2020-02-27 11:15:12 | 856981504 | 29.19 |
| 2020-02-27 11:15:11 | 856977408 | 29.12 |
| 2020-02-27 11:15:10 | 856977408 | 29.32 |
| 2020-02-27 11:15:09 | 856977408 | 29.2 |
| 2020-02-27 11:15:08 | 856973312 | 29.36 |
| 2020-02-27 11:15:07 | 856973312 | 28.79 |
+---------------------+-----------------+-----------------+
30 rows in set (0.08 sec)
Interrogez les lignes InnoDB lues et insérées au cours des 30 dernières secondes :
MySQL> SELECT TIME, EXTRA->'$.INNODB_ROWS_READ', EXTRA->'$.INNODB_ROWS_INSERTED'
FROM performance_schema.PERF_STATISTICS
ORDER BY TIME DESC
LIMIT 30;
+---------------------+-----------------------------+---------------------------------+
| TIME | EXTRA->'$.INNODB_ROWS_READ' | EXTRA->'$.INNODB_ROWS_INSERTED' |
+---------------------+-----------------------------+---------------------------------+
| 2020-02-27 11:22:17 | 39209 | 0 |
| 2020-02-27 11:22:16 | 36098 | 0 |
| 2020-02-27 11:22:15 | 38035 | 0 |
| 2020-02-27 11:22:14 | 37384 | 0 |
| 2020-02-27 11:22:13 | 38336 | 0 |
| 2020-02-27 11:22:12 | 33946 | 0 |
| 2020-02-27 11:22:11 | 36301 | 0 |
| 2020-02-27 11:22:10 | 36835 | 0 |
| 2020-02-27 11:22:09 | 36900 | 0 |
| 2020-02-27 11:22:08 | 36402 | 0 |
| 2020-02-27 11:22:07 | 39672 | 0 |
| 2020-02-27 11:22:06 | 39316 | 0 |
| 2020-02-27 11:22:05 | 37830 | 0 |
| 2020-02-27 11:22:04 | 36396 | 0 |
| 2020-02-27 11:22:03 | 34820 | 0 |
| 2020-02-27 11:22:02 | 37350 | 0 |
| 2020-02-27 11:22:01 | 39463 | 0 |
| 2020-02-27 11:22:00 | 38419 | 0 |
| 2020-02-27 11:21:59 | 37673 | 0 |
| 2020-02-27 11:21:58 | 35117 | 0 |
| 2020-02-27 11:21:57 | 36140 | 0 |
| 2020-02-27 11:21:56 | 37592 | 0 |
| 2020-02-27 11:21:55 | 39765 | 0 |
| 2020-02-27 11:21:54 | 35553 | 0 |
| 2020-02-27 11:21:53 | 35882 | 0 |
| 2020-02-27 11:21:52 | 37061 | 0 |
| 2020-02-27 11:21:51 | 40699 | 0 |
| 2020-02-27 11:21:50 | 39608 | 0 |
| 2020-02-27 11:21:49 | 39317 | 0 |
| 2020-02-27 11:21:48 | 37413 | 0 |
+---------------------+-----------------------------+---------------------------------+
30 rows in set (0.08 sec)
Connexion à une plateforme de supervision
Connectez PERF_STATISTICS à une plateforme de supervision externe pour visualiser les métriques dans le temps. La capture d'écran ci-dessous présente un exemple de tableau de bord Grafana connecté aux données de performance de PolarDB.
