Leistungsanalyse über DBMS-Plugins oder andere Lösungen

Leistungsanalyse über DBMS-Plugins oder andere Lösungen

Ich arbeite an einem Systemüberwachungsprodukt, das sich derzeit auf die Leistung auf Systemebene konzentriert. Wir weiten unser Angebot auf die Überwachung von Datenbanksystemen aus. Derzeit können wir einfache Leistungsinformationen aus einer Auswahl von DBMS abrufen, wie etwa Verbindungsanzahl, Festplatten-E/A-Raten, Wartezeiten bei Sperren usw.

Wir hätten jedoch gerne eine Möglichkeit, die Ausführungszeit jeder Abfrage an ein DBMS zu messen.ohneDer Client muss die Überwachung in seinem Anwendungscode implementieren.

Einige mögliche Lösungen könnten sein:

  • Eine Art Proxy, der zwischen Client und Server sitzt. SSL könnte hier ein Problem darstellen, außerdem müssen wir das Netzwerkprotokoll für jedes DBMS zurückentwickeln und implementieren.
  • Plug-In für jedes DBMS-System, das automatisch Leistungsinformationen aufzeichnet, wenn eine Abfrage eingeht.

Zu den weiteren Problemen gehört die „Anonymisierung“ des SQL, d. h. die Verwendung von etwas wie SELECT * FROM products WHERE price > 20 AND name LIKE "%disk%"und die Erstellung von SELECT * FROM products WHERE price > ? AND name LIKE "%?%". Mit etwas geschicktem Parsing und regulären Ausdrücken sollte dies jedoch nicht allzu schwierig sein.

Wir konzentrieren uns hauptsächlich auf:

  • MySQL
  • MSSQL
  • Orakel
  • Redis
  • mongodb
  • zwischengespeichert

Gibt es Plug-in-artige Mechanismen, die wir hierfür nutzen können? Oder gibt es eine einfachere Lösung?

Antwort1

Es gibt keine allgemeine Lösung, die auf alle Ihre Datenbanken anwendbar ist. Und der Versuch, die Abfrageantwortzeit bei Oracle zu messen, ist sehr schwierig. Ich habe nicht mit Leistungsanalysen für Memcache-/NoSQL-Datenbanken gearbeitet.

Für MySQL gibt esMySQL-Proxy- was leicht per Skript ausgeführt werden kann. Sie erhalten jedoch wahrscheinlich alles, was Sie benötigen, aus dem langsamen Abfrageprotokoll (mit einem Schwellenwert von Null). Ich verwende eine modifizierte Version vondieses Skriptum meine Anfragen zu „anonymisieren“.

Es gibt (sehr teure) Tools wie Compuwares Client Vantage, die den Netzwerkverkehr überwachen und Leistungsmetriken auf verschiedenen Ebenen (einschließlich Datenbanken) ableiten können. Das einzige vergleichbare kostenlose Softwaretool, das mir bekannt ist, istVergangener Montagwelches (soweit ich weiß) nicht die gründliche Prüfung bietet, die zum Messen der DB-Antwortzeiten bei einer dauerhaften TCP-Verbindung erforderlich ist.

Es wäre zwar möglich, alle Metriken zu erfassen, indem alle Zugriffe über Webservices geleitet werden, dies führt jedoch zu Latenzzeiten bei der Transaktion. Dies gilt für alle Proxy-Operationen, ist aber besonders problematisch bei nicht persistenten Verbindungen über SSL.

Haben Sie darüber nachgedacht, wie Sie all diese Daten sammeln, verwalten und analysieren werden? Vielleicht möchten Sie einen Blick darauf werfen:Graphit.

Welche Arten von Clients verwenden Sie? Bevor Sie sich die Datenbanken ansehen, sollten Sie die Reaktionszeiten beim Client messen. Sie müssen sich nur dann Gedanken über die Datenbankleistung machen, wenn Sie dort ein Leistungsproblem haben. Und wenn der Client ein Webbrowser ist, ist das eine viel einfachere Aufgabe. Stellen Sie Ihren Webserver einfach so ein, dass er die Reaktionszeiten protokolliert, und beginnen Sie mit der Datenzusammenstellung. Sie können sogar einfache Zusatzfunktionen zum Messen der Seitenreaktion hinzufügen, die ein weitaus besserer Indikator für die wahrgenommene Leistung sind, z. B.Der Boomerang von Yahoo

verwandte Informationen