Die Protokollierung langsamer Abfragen ist ein wichtiger Bestandteil der Leistungsoptimierung jeder Rails-Anwendung. Rails bietet einen eingebauten Mechanismus zur Protokollierung langsamer Abfragen, die Active Support Notifications.

Dieser Artikel zeigt dir, wie du Active Support Notifications nutzen kannst, um langsame Abfragen in deiner Rails-Anwendung zu protokollieren. Außerdem geben wir dir Tipps, wie du langsame Abfrageprotokolle analysieren kannst, um Leistungsprobleme zu erkennen und zu beheben.

Was ist eine langsame Abfrage?

Eine langsame Abfrage ist eine Abfrage, die länger als ein bestimmter Schwellenwert zur Ausführung benötigt. Der Schwellenwert für eine langsame Abfrage kann je nach Anwendung und ihren Leistungsanforderungen variieren. Eine gute Faustregel ist jedoch, dass jede Abfrage, die länger als 100 Millisekunden dauert, als langsam gilt.

Warum ist es wichtig, langsame Abfragen zu protokollieren?

Es gibt viele Gründe, warum es wichtig ist und warum du langsame Abfragen protokollieren solltest.

Erstens können langsame Abfragen ein Anzeichen für grundlegende Leistungsprobleme in deiner Anwendung sein. Wenn du langsame Abfragen protokollierst, kannst du diese Probleme frühzeitig erkennen und Maßnahmen ergreifen, um sie zu beheben. Vorbeugen ist besser als behandeln.

Zweitens können langsame Abfragen dir helfen, potenzielle Sicherheitslücken in deiner Anwendung zu erkennen. Eine langsame Abfrage, die durch einen böswilligen SQL-Injection-Angriff verursacht wurde, kann zum Beispiel genutzt werden, um die Schwachstelle zu erkennen und Maßnahmen zu ergreifen, um sie zu entschärfen.

Drittens können langsame Abfragen dir helfen, die Leistung deiner Anwendung zu verbessern.

Durch die Analyse von Protokollen langsamer Abfragen kannst du die Abfragen identifizieren, die die meisten Leistungsprobleme verursachen, und Maßnahmen zu deren Optimierung ergreifen. Wir können langsame Abfragen in unserer Anwendung mit Hilfe von Active Support Notifications protokollieren.

Was sind Active Support Notifications?

Active Support Notifications sind ein unverzichtbares Werkzeug für jeden ernsthaften Rails-Entwickler, der tiefere Einblicke in die Leistung und das Verhalten seiner Anwendung gewinnen möchte. Sie ermöglichen es dir, bestimmte Ereignisse in deinem Code zu verfolgen und wertvolle Daten über ihre Ausführung zu sammeln.

Wenn du ihre Funktionsweise verstehst und sie effektiv einsetzt, kannst du die Leistung, die Wartbarkeit und den allgemeinen Zustand deiner Rails-Anwendung erheblich verbessern.

Im Folgenden findest du einen Überblick über Active Support Notifications und ihre wichtigsten Vorteile.

Funktionsweise

  • Instrumentierung: Du kannst bestimmte Ereignisse in deiner Rails-Anwendung mit der Methode ActiveSupport::Notifications.instrument instrumentieren. Diese Methode nimmt einen Namen, eine Nutzlast (optionale Daten) und einen Codeblock entgegen, der ausgeführt werden soll.
  • Nutzdaten: Mit der Nutzlast kannst du zusätzliche Daten zu dem Ereignis, das instrumentiert werden soll, übergeben. Das können z. B. Zeitstempel, Benutzer-IDs, Details zu Datenbankabfragen oder andere relevante Informationen sein.
  • Abonnenten: Nachdem der Block ausgeführt wurde, sendet Active Support eine Benachrichtigung mit dem Namen und der Nutzlast an registrierte Abonnenten. Diese Abonnenten können dann die Informationen verarbeiten und auf der Grundlage des Ereignisses bestimmte Maßnahmen ergreifen.

Vorteile

  • Leistungsüberwachung: Indem du Schlüsselereignisse instrumentierst, kannst du ihre Ausführungszeit verfolgen und Leistungsengpässe in deiner Anwendung identifizieren. So kannst du deinen Code optimieren und die Gesamtleistung deiner Rails-Anwendung verbessern.
  • Fehlersuche: Benachrichtigungen können wertvolle Einblicke in den Ablauf deiner Anwendung liefern und bei der Diagnose von Problemen helfen. Die Nutzdaten können unerwartetes Verhalten oder Fehler während der Laufzeit aufdecken.
  • Benutzerdefinierte Instrumentierung: Du kannst die Funktionalität von Active Support Notifications erweitern, indem du deine eigenen Instrumente und Abonnenten erstellst. Auf diese Weise kannst du bestimmte Ereignisse verfolgen, die für deine Anwendung von Bedeutung sind.
  • Integration mit anderen Bibliotheken: Viele beliebte Rails-Bibliotheken wie Action Cable und ActiveJob nutzen Active Support Notifications, um Leistungsdaten und Ereignisverfolgungsfunktionen bereitzustellen.

Wie man langsame Abfragen mit Active Support Notifications protokolliert

Active Support Notifications ist ein in Rails integrierter Mechanismus zur Protokollierung von Ereignissen, die in deiner Anwendung auftreten. Um Active Support Notifications zur Protokollierung langsamer Abfragen zu verwenden, wird der unten stehende Beispielcode in einen Initializer (z. B. config/initializers/error_notifications.rb) eingefügt, damit er beim Start der Anwendung ausgeführt wird. Alternativ kannst du den Code auch einem bestimmten Controller oder Model hinzufügen, um eine gezielte Protokollierung zu erreichen.

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

Dieser Code protokolliert alle SQL-Abfragen, die länger als 100 Millisekunden zur Ausführung brauchen.

Zu den protokollierten Informationen gehören die SQL-Anweisung, die Dauer der Abfrage sowie der Name der Datei und die Zeilennummer, in der die Abfrage ausgeführt wurde.

So analysierst du die Protokolle langsamer Abfragen

Sobald du mit der Protokollierung langsamer Abfragen begonnen hast, kannst du die Protokolle analysieren, um die Abfragen zu identifizieren, die die meisten Leistungsprobleme verursachen. Es gibt verschiedene Möglichkeiten, langsame Abfrageprotokolle zu analysieren.

Eine Möglichkeit ist die Verwendung eines Tools wie dem Rails Performance Dashboard. Das Rails Performance Dashboard bietet eine grafische Oberfläche, mit der du langsame Abfrageprotokolle anzeigen und analysieren kannst.

Eine andere Möglichkeit, langsame Abfrageprotokolle zu analysieren, ist die Verwendung eines Texteditors oder Tabellenkalkulationsprogramms. Mit einem Texteditor oder einem Tabellenkalkulationsprogramm kannst du die Protokolle der langsamen Abfragen nach Dauer, SQL-Anweisung oder Dateinamen sortieren und filtern.

Das kann dir helfen, die Abfragen zu identifizieren, die die meisten Leistungsprobleme verursachen.

Wie du langsame Abfragen behebst

Sobald du die Abfragen identifiziert hast, die die meisten Leistungsprobleme verursachen, kannst du Maßnahmen ergreifen, um sie zu beheben. Es gibt verschiedene Möglichkeiten, um langsame Abfragen zu beheben.

Eine Möglichkeit ist die Optimierung der SQL-Anweisung. Du kannst die SQL-Anweisung optimieren, indem du Indizes verwendest, Constraints hinzufügst oder effizientere Abfragemethoden verwendest.

Eine andere Möglichkeit, langsame Abfragen zu beheben, ist das Zwischenspeichern der Abfrageergebnisse. Du kannst die Ergebnisse der Abfrage in einem Rails-Cache-Speicher oder in einem Datenbank-Cache (z. B. Redis, Memcached) zwischenspeichern.

Wenn du eine Paginierung implementierst und große Ergebnismengen in kleinere Seiten aufteilst, kannst du die Leistung verbessern und den Speicherverbrauch reduzieren.

Ziehe außerdem in Betracht, Hintergrundjobs auszuführen und lang laufende Abfragen auf Hintergrundjobs auszulagern (z. B. mit Sidekiq, Resque), um das Blockieren von Webanfragen zu vermeiden.

Zusammenfassung

Active Support Notifications ist ein eingebauter Rails-Mechanismus zur Protokollierung langsamer Abfragen. Die Protokollierung langsamer Abfragen ist ein wichtiger Bestandteil der Leistungsoptimierung jeder Rails-Anwendung. Wenn du sie protokollierst, kannst du Leistungsprobleme frühzeitig erkennen und Maßnahmen ergreifen, um sie zu beheben.

Du kannst Active Support Notifications verwenden, um langsame Abfragen zu protokollieren und die Protokolle zu analysieren, um die Abfragen zu identifizieren, die die meisten Leistungsprobleme verursachen. Sobald du die Abfragen identifiziert hast, die die meisten Leistungsprobleme verursachen, kannst du Schritte unternehmen, um sie zu beheben.

Wenn du an einem gut etablierten Projekt arbeitest und die Möglichkeit hast, Junior-Entwickler/innen im Team zu haben, wird diese Stufe der Arbeitsoptimierung dazu führen, dass sie bessere Praktiken einführen, indem sie in den Prozess einbezogen werden. Und indem du das Überwachungsteam und die Senior-Entwickler einbeziehst, kannst du eine bessere und leistungsfähigere Plattform aufbauen. Gib dein langsames Abfrageprojekt an einen Juniorentwickler, und er wird enorm davon profitieren.

Warte nicht, bis das Problem existiert. Verhindere langsame Abfragen, bevor sie dich ausbremsen. Sei proaktiv, nicht reaktiv!

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.