La journalisation des requêtes lentes est une partie importante de l’optimisation des performances de toute application Rails. Rails fournit un mécanisme intégré de journalisation des requêtes lentes appelé Active Support Notifications.

Cet article vous montrera comment utiliser les notifications de support actif pour journaliser les requêtes lentes dans votre application Rails. Nous vous donnerons également des conseils sur la manière d’analyser les journaux de requêtes lentes afin d’identifier et de résoudre les problèmes de performance.

Qu’est-ce qu’une requête lente ?

Une requête lente est une requête dont l’exécution prend plus de temps qu’un certain seuil. Le seuil de ce qui constitue une requête lente peut varier en fonction de l’application et de ses exigences en matière de performances. Toutefois, une bonne règle empirique consiste à considérer comme lente toute requête qui prend plus de 100 millisecondes.

Pourquoi est-il important de journaliser les requêtes lentes ?

Il existe de nombreuses raisons pour lesquelles il est important et souhaitable de journaliser les requêtes lentes.

Tout d’abord, les requêtes lentes peuvent être le signe de problèmes de performance sous-jacents dans votre application. En enregistrant les requêtes lentes, vous pouvez identifier ces problèmes à un stade précoce et prendre des mesures pour les résoudre. La prévention vaut mieux que le traitement.

Deuxièmement, les requêtes lentes peuvent vous aider à identifier les failles de sécurité potentielles de votre application. Par exemple, une requête lente causée par une attaque malveillante par injection SQL peut être utilisée pour identifier la vulnérabilité et prendre des mesures pour l’atténuer.

Troisièmement, les requêtes lentes peuvent vous aider à améliorer les performances de votre application.

En analysant les journaux de requêtes lentes, vous pouvez identifier les requêtes qui causent le plus de problèmes de performance et prendre des mesures pour les optimiser. Nous pouvons enregistrer les évènements de requêtes lentes dans notre application à l’aide des notifications de support actif.

Que sont les Active Support Notifications ?

Les notifications de support actif sont un outil essentiel pour tout développeur Rails sérieux qui souhaite obtenir des informations plus approfondies sur les performances et le comportement de son application. Elles vous permettent de suivre les évènements spécifiques qui se produisent dans votre code et de recueillir des données précieuses sur leur exécution.

En comprenant leur fonctionnalité et en les exploitant efficacement, vous pouvez améliorer de manière significative les performances, la maintenabilité et la santé globale de votre application Rails.

Voici un aperçu des notifications de support actif et de leurs principaux avantages.

Fonctionnalité

  • Instrumentation : Vous pouvez instrumenter des évènements spécifiques dans votre application Rails en utilisant la méthode ActiveSupport::Notifications.instrument. Cette méthode prend un nom, une charge utile (données facultatives) et un bloc de code à exécuter.
  • Charge utile : La charge utile vous permet de transmettre des données supplémentaires relatives à l’évènement en cours d’instrumentation. Il peut s’agir d’éléments tels que des horodatages, des identifiants d’utilisateurs, des détails de requêtes de base de données ou toute autre information pertinente.
  • Abonnés: Une fois le bloc exécuté, Active Support envoie une notification contenant le nom et la charge utile aux abonnés enregistrés. Ces derniers peuvent alors traiter les informations et prendre des mesures spécifiques en fonction de l’évènement.

Avantages

  • Contrôle des performances : En instrumentant les événements clés, vous pouvez suivre leur temps d’exécution et identifier les goulets d’étranglement au sein de votre application. Cela vous permet d’optimiser votre code et d’améliorer les performances globales de votre application Rails.
  • Débogage : Les notifications peuvent fournir des informations précieuses sur le flux de votre application et aider à diagnostiquer les problèmes. Les données utiles peuvent révéler des comportements inattendus ou des erreurs pendant l’exécution.
  • Instrumentation personnalisée : Vous pouvez étendre les fonctionnalités des notifications d’Active Support en créant vos propres instruments et abonnés. Cela vous permet de suivre des événements spécifiques correspondant aux besoins particuliers de votre application.
  • Intégration avec d’autres bibliothèques : De nombreuses bibliothèques Rails populaires, comme Action Cable et ActiveJob, s’appuient sur les notifications d’assistance active pour fournir des données de performance et des capacités de suivi des événements.

Comment journaliser les requêtes lentes avec Active Support Notifications ?

Les notifications de support actif sont un mécanisme Rails intégré permettant de consigner les événements qui se produisent dans votre application. Pour utiliser les notifications d’Active Support afin de journaliser les requêtes lentes, l’exemple de code ci-dessous doit être placé dans un initialisateur (par exemple, config/initializers/error_notifications.rb) afin de s’assurer qu’il s’exécute au démarrage de l’application. Vous pouvez également ajouter le code à un contrôleur ou à un modèle spécifique pour une journalisation ciblée.

config.active_support.Notifications.subscribe('sql.active_record') do |*args|
  event = ActiveSupport::Notifications::Event.new(*args)
  if event.duration > 100
    Rails.logger.info "Slow query: #{event.payload[:sql]}"
  end
end

Ce code enregistrera toutes les requêtes SQL dont l’exécution prend plus de 100 millisecondes.

Les informations consignées comprennent l’instruction SQL, la durée de la requête, le nom du fichier et le numéro de ligne où la requête a été exécutée.

Comment analyser les journaux de requêtes lentes

Une fois que vous avez commencé à journaliser les requêtes lentes, vous pouvez analyser les journaux pour identifier les requêtes qui causent le plus de problèmes de performance. Il existe plusieurs façons d’analyser les journaux de requêtes lentes.

L’une d’entre elles consiste à utiliser un outil tel que Rails Performance Dashboard. Le tableau de bord des performances de Rails fournit une interface graphique permettant de visualiser et d’analyser les journaux de requêtes lentes.

Une autre façon d’analyser les journaux de requêtes lentes consiste à utiliser un éditeur de texte ou un tableur. Vous pouvez utiliser un éditeur de texte ou un tableur pour trier et filtrer les journaux de requêtes lentes par durée, par instruction SQL ou par nom de fichier.

Cela peut vous aider à identifier les requêtes qui posent le plus de problèmes de performance.

Comment corriger les requêtes lentes

Une fois que vous avez identifié les requêtes qui posent le plus de problèmes de performances, vous pouvez prendre des mesures pour les corriger. Il existe plusieurs façons de résoudre les problèmes de lenteur des requêtes.

L’une d’entre elles consiste à optimiser l’instruction SQL. Vous pouvez optimiser l’instruction SQL en utilisant des index, en ajoutant des contraintes ou en utilisant des méthodes d’interrogation plus efficaces.

Une autre façon de résoudre les problèmes de lenteur consiste à mettre en cache les résultats de la requête. Vous pouvez mettre en cache les résultats de la requête en utilisant un stockage de cache Rails ou en utilisant un cache de base de données (par exemple, Redis, Memcached).

La mise en œuvre de la pagination et le découpage des grands ensembles de résultats en pages plus petites amélioreront les performances et réduiront l’utilisation de la mémoire.

En outre, envisagez d’exécuter des tâches d’arrière-plan et de décharger les requêtes longues sur des tâches d’arrière-plan (par exemple, en utilisant Sidekiq, Resque) afin d’éviter de bloquer les requêtes web.

Résumé

Les notifications de support actif sont un mécanisme Rails intégré pour journaliser les requêtes lentes. La journalisation des requêtes lentes est une partie importante de l’optimisation des performances de toute application Rails. En les enregistrant, vous pouvez identifier les problèmes de performance à un stade précoce et prendre des mesures pour les résoudre.

Vous pouvez utiliser les notifications de support actif pour enregistrer les requêtes lentes et analyser les journaux pour identifier les requêtes qui causent le plus de problèmes de performance. Une fois que vous avez identifié les requêtes qui causent le plus de problèmes de performance, vous pouvez prendre des mesures pour les résoudre.

Si vous êtes sur un projet bien établi et que vous avez la capacité d’avoir des développeurs juniors dans les équipes, ce niveau d’optimisation du travail les guidera pour établir de meilleures pratiques en étant impliqué dans le processus. Et en engageant l’équipe de surveillance et les seniors, à construire une plateforme meilleure et plus performante. Confiez votre projet de requêtes lentes à un développeur junior, il en tirera d’énormes bénéfices.

N’attendez pas que le problème existe. Prévenez les requêtes lentes avant qu’elles ne vous ralentissent. Soyez proactif, pas réactif !

Lee Sheppard

Lee is an Agile certified full stack Ruby on Rails developer. With over six years in the tech industry he enjoys teaching, coaching Agile, and mentoring others. Lee also speaks at tech related events and has a background in design and illustration.