For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/manage-and-operate/observability/logs-data-platform/usecase-mysql-slow-queries.md.

Suivre les requêtes MySQL lentes avec Logs Data Platform

Voir en Markdown

Maintenez votre base de données MySQL à haute vitesse avec Logs Data Platform !

Objectif

MySQL est l'une des options les plus populaires en matière de logiciels de base de données. Il dispose de nombreuses fonctionnalités et peut répondre à des requêtes complexes avec d'excellentes performances. Mais avec le temps, votre base de données s'agrandit, sa complexité augmente, et les performances déclinent naturellement. De nombreuses astuces existent pour améliorer la vitesse de vos requêtes, mais pour y remédier, vous devez d'abord savoir quelles requêtes sont lentes.

Ce guide vous aide à suivre vos requêtes les plus lentes et à les envoyer vers Logs Data Platform pour une analyse plus approfondie.

Prérequis

Vous devez au préalable lire ces trois guides :

En pratique

Configurer les logs de requêtes lentes MySQL

Pour envoyer vos logs vers Logs Data Platform, vous devez d'abord activer les logs de requêtes lentes dans votre configuration MySQL.

Nous vous recommandons de consulter la documentation officielle de MySQL pour votre propre version de MySQL. Voici par exemple une configuration fonctionnelle sur MySQL 5.6 :

# Vous pouvez voir ici les requêtes dont la durée est particulièrement longue
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-queries.log
long_query_time = 0.5

Si vous ajoutez ces lignes à votre fichier de configuration MySQL et le redémarrez, MySQL journalisera alors toute requête prenant plus de 0,5 seconde à s'exécuter dans le fichier /var/log/mysql/slow-queries.log.

Voici un exemple des lignes produites par le log de requêtes lentes :

 # Time: 161223 16:43:49
 # User@Host: guest[guest] @ localhost []  Id:     2
 # Query_time: 0.734103  Lock_time: 0.000161 Rows_sent: 72761  Rows_examined: 518199
 SET timestamp=1482507829;
 select * from salaries left join employees on salaries.emp_no = employees.emp_no where employees.first_name Like '%ba%' ORDER BY salaries.salary ASC, employees.last_name ASC;
 # Time: 161223 16:43:52
 # User@Host: guest[guest] @ localhost []  Id:     2
 # Query_time: 0.628527  Lock_time: 0.000216 Rows_sent: 72750  Rows_examined: 518199
 SET timestamp=1482507832;
 select * from salaries left join employees on salaries.emp_no = employees.emp_no where employees.first_name Like '%yo%' ORDER BY salaries.salary ASC, employees.last_name ASC;
 # Time: 161223 16:51:08
 # User@Host: guest[guest] @ localhost []  Id:     2
 # Query_time: 0.649018  Lock_time: 0.000223 Rows_sent: 72963  Rows_examined: 518199
 SET timestamp=1482508268;
 select * from salaries left join employees on salaries.emp_no = employees.emp_no where employees.first_name Like '%er%' ORDER BY salaries.salary ASC, employees.last_name ASC;
 # Time: 161223 16:51:11
 # User@Host: guest[guest] @ localhost []  Id:     2
 # Query_time: 0.609382  Lock_time: 0.000199 Rows_sent: 77524  Rows_examined: 518199
 SET timestamp=1482508271;
 select * from salaries left join employees on salaries.emp_no = employees.emp_no where employees.first_name Like '%de%' ORDER BY salaries.salary ASC, employees.last_name ASC;

Les logs de requêtes lentes sont des logs multi-lignes qui fournissent les informations suivantes :

  • L'heure de création du log.
  • L'utilisateur, l'hôte et l'Id du thread associés à la requête.
  • Le temps d'exécution de la requête, avec la durée de verrouillage de la table, ainsi que le nombre de lignes envoyées et examinées.
  • Le timestamp de la requête elle-même.
  • La requête elle-même.

Configurer Filebeat sur votre système

Notre méthode préférée pour envoyer les logs de requêtes lentes MySQL consiste à envoyer les logs directement vers Logs Data Platform à l'aide de Filebeat. Nous couvrons Filebeat en détail dans un autre tutoriel. Voici un fichier de configuration filebeat.yml minimal.

#=========================== Filebeat inputs =============================

filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.

- type: log

  # Change to true to enable this input configuration.
  enabled: false

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /var/log/*.log

#============================= Filebeat modules ===============================

filebeat.config.modules:
  # Glob pattern for configuration loading
  path: ${path.config}/modules.d/*.yml

  # Set to true to enable config reloading
  reload.enabled: false

#================================ General =====================================

# Optional fields that you can specify to add additional information to the
# output.
fields_under_root: true
fields:
  X-OVH-TOKEN: '<X-OVH-TOKEN-VALUE>'


#----------------------------- Logstash output --------------------------------
output.logstash:
  # Boolean flag to enable or disable the output module.
  enabled: true

  # The Logstash hosts
  hosts: ["<your_cluster>.logs.ovh.com:5044"]

  # Enable SSL support. SSL is automatically enabled if any SSL setting is set.
  ssl.enabled: true

N'oubliez pas de remplacer <X-OVH-TOKEN-VALUE> par la valeur du jeton d'écriture de votre flux de logs.

Activez le support MySQL de filebeat avec la commande suivante :

$ ldp@ubuntu:~$ sudo filebeat modules enable mysql

Cela génère un nouveau fichier de module : /etc/filebeat/modules.d/mysql.yml, veuillez le modifier pour y inclure tous vos chemins de fichiers d'erreur/lents MySQL :

- module: mysql
  # Error logs
  error:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/var/log/mysqld.log"]

  # Slow logs
  slowlog:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/var/log/mysql-slow.log"]

Démarrez Filebeat :

Utilisez :

$ ldp@ubuntu:~$ sudo systemctl restart filebeat.service

ou

$ ldp@ubuntu:~$ sudo /etc/init.d/filebeat restart

selon votre distribution.

Essayez d'exécuter quelques requêtes lentes dans votre base de données. Pour cela, vous pouvez utiliser cet exemple de base de données et utiliser des requêtes join et like. Vous pouvez également utiliser la requête MySQL Sleep :

SELECT SLEEP(2);

Exploiter vos résultats dans Graylog

Un log entièrement parsé ressemble à ceci :

slow_graylog
  • Le champ mysql_slowlog_query_time_sec_num est déjà disponible pour une analyse plus approfondie.
  • Vous pouvez suivre les champs mysql_slowlog_user et mysql_slowlog_host à l'origine des requêtes les plus lentes.
  • Vous disposez du champ mysql_slowlog_rows_examined_int indiquant le nombre de lignes analysées et retournées.

Toutes ces informations peuvent vous aider à analyser les requêtes les plus complexes pour votre base de données. Vous saurez quand faire évoluer votre infrastructure et quand votre base de données est trop volumineuse pour votre matériel, ou quand optimiser vos requêtes. Bien entendu, il est toujours préférable de disposer d'un tableau de bord agréable pour afficher vos propres indicateurs clés de performance. Une façon d'obtenir cette information critique dès qu'elle arrive est d'utiliser la fonctionnalité d'alerte.

slow_graylog

Aller plus loin

Cette page vous a-t-elle aidé ?