FBMonLogger
FBMonLogger ist jetzt Teil von HQbird Standard!
FBMonLogger ist ein Werkzeug zur Analyse der Ausgaben von Monitoring-Tabellen in Firebird, um Probleme mit langsamen SQL-Abfragen, falsch entworfenen Transaktionen (langlaufende Transaktionen, Transaktionen mit falscher Isolationsstufe usw.) zu finden und problematische Anwendungen zu identifizieren.
FBMonLogger kann sich mit einer Firebird-Datenbank mit Leistungsproblemen verbinden und feststellen, was der Grund für die Langsamkeit ist: Ist es ein Benutzer-Attachment, eine langsame SQL-Abfrage oder eine langlaufende Transaktion?
FBMonLogger unterstützt Firebird 2.1, 2.5 und 3.0 - für ältere Firebird-Versionen oder InterBase verwenden Sie bitte FBScanner.
FBMonLogger kann Ihnen Folgendes anzeigen:
- Top-Attachments mit der höchsten Anzahl an IO-Operationen, nicht-indizierten und indizierten Lesevorgängen
- Top-SQL-Anweisungen mit der höchsten Anzahl an IO-Operationen, nicht-indizierten und indizierten Lesevorgängen
- Problematische Transaktionen: langlaufende Transaktionen, Transaktionen mit fehlerhafter Isolationsstufe, Lese-/Schreibtransaktionen und zugehörige Informationen: wann sie gestartet wurden, welche Anwendungen diese Transaktionen gestartet haben, von welcher IP-Adresse usw.
- Attachments und Anweisungen mit den intensivsten Garbage-Collection-Aktionen
- Lese-/Schreibverhältnis, INSERT/UPDATE/DELETE-Verhältnis und mehr.
Nach der Verbindung mit der Datenbank, in der Sie Leistungsprobleme finden möchten, sollten mehrere Momentaufnahmen der Monitoring-Tabellen erstellt werden - klicken Sie auf «Get Snapshot», um eine Momentaufnahme zu erstellen.
Aggregierte Leistungsstatistiken für Benutzer-Attachments
Auf dem ersten Bildschirm sehen wir aggregierte Statistiken für Datenbankverbindungen und können Verbindungen mit den größten Problemen identifizieren:
Sequenzielle Lesevorgänge / Indizierte Lesevorgänge
„Sequenzielle Lesevorgänge / Indizierte Lesevorgänge" zeigt uns das Gesamtverhältnis zwischen sequenziellen (nicht-indizierten) Lesevorgängen und indizierten Lesevorgängen in der Anwendung. Normalerweise sollte die Anzahl der nicht-indizierten Lesevorgänge gering sein, daher ist ein großer Prozentsatz sequenzieller Lesevorgänge ein Zeichen dafür, dass viele SQL-Abfragen NATURAL-Ausführungspläne haben, die ein Grund für langsame Antwortzeiten sein könnten.
Ein Klick auf einen Datensatz in «TOP-Attachments: sequenzielle/indizierte Lesevorgänge» führt Sie zur Registerkarte «Attachments», wo Sie weitere Details zum Attachment sehen können, und dann zur Registerkarte «Transaktionen» oder «Anweisungen», wo Sie Transaktionen und Anweisungen sehen, die mit dem ausgewählten Attachment verknüpft sind (wenn das Häkchen «Mit ausgewähltem Attachment verknüpfen» aktiviert ist, andernfalls werden alle Transaktionen/Anweisungen für alle Attachments angezeigt).
Schreibdetails
«Schreibdetails» gibt Ihnen einen Überblick über Schreiboperationen: das Verhältnis zwischen INSERTs/UPDATEs/DELETEs bei allen Datenbank-Attachments. In der Tabelle der Top-Schreiber sehen Sie Attachments mit der größten Anzahl an Schreiboperationen. Dies ist nützlich, um Anwendungen oder Softwaremodule zu identifizieren, die übermäßig viele Updates oder Deletes durchführen (die gefährlichsten Operationen in Bezug auf Garbage Collection).
Garbage-Collection-Details
Was bedeuten Garbage-Collection-Operationen?
- Purge - die Engine entfernt Backversionen, nur die primäre Version ist in der Datenbank.
- Expunge - sowohl die primäre Version als auch alle Backversionen wurden gelöscht.
- Backout - nur die primäre Version wird entfernt (aufgrund von Rollback).
Normalerweise können wir Purge mit UPDATE-Operationen, Expunge mit DELETE und Backout mit Rollback von INSERT oder UPDATE assoziieren. Viele Backouts könnten bedeuten, dass es ein Problem mit dem Transaktionsmanagement in der Anwendung gibt.
Speichernutzung
Das Diagramm «Speichernutzung» zeigt uns den gesamten Speicher, der derzeit von allen aktiven Attachments verwendet wird, sowie den Spitzenwert des zugewiesenen Speichers für sie in der Vergangenheit.
Die Liste der Top-Attachments nach Speichernutzung zeigt uns die größten Speicherverbraucher unter Ihren Attachments. Dies ist nützlich, um Anwendungen oder Softwaremodule mit übermäßiger Speichernutzung zu finden.
Aggregierte Leistungsstatistiken für Anweisungen
Auf der zweiten Registerkarte finden Sie aggregierte Leistungsstatistiken für Anweisungen. Diese Statistiken spiegeln besser die momentane Situation in der Datenbank wider - da Monitoring-Tabellen Informationen seit Beginn des Lebenszyklus jedes Objekts sammeln, sind die hier sichtbaren Anweisungen diejenigen, die zum Zeitpunkt der Momentaufnahme ausgeführt wurden.
Sequenzielle Lesevorgänge / Indizierte Lesevorgänge
In dieser Liste sehen wir die Top-Anweisungen, die viele sequenzielle Lesevorgänge aus der Datenbank durchführen. Normalerweise erfordern solche Anweisungen SQL-Tuning - entweder durch Index-Tuning oder durch Neugestaltung der SQL-Abfrage.
Um die Abfrage zu optimieren, überprüfen Sie ihren Ausführungsplan: Normalerweise ist es möglich, die Abfragegeschwindigkeit zu verbessern, indem NATURAL in Plänen durch neue Indizes oder Abfrage-Neugestaltung eliminiert wird. Klicken Sie auf die Anweisung in dieser Liste, um die Registerkarte «Anweisungen» zu öffnen, wo Sie weitere Details zur ausgewählten Anweisung finden und zur zugehörigen Transaktion oder zum Attachment springen können.
Seiten-Lesevorgänge/Seiten-Schreibvorgänge
Diese Diagramme und Listen zeigen kurze Informationen zu den Top-Anweisungen, die viele Lesevorgänge durchführen - das bedeutet, dass sie erhebliche IO-Ressourcen verbrauchen und die Leistung anderer Abfragen beeinträchtigen können. SQL-Anweisungen mit Spitzenwerten sollten sorgfältig auf optimale Leistung überprüft werden.
Schreibdetails für Anweisungen
In diesem Diagramm sehen Sie, welche schreibenden SQL-Anweisungen zum Zeitpunkt der Momentaufnahme der Monitoring-Tabellen ausgeführt wurden, und identifizieren UPDATES und DELETEs, die viele Änderungen in der Datenbank vorgenommen haben.
Garbage-Collection-Details für Anweisungen
In diesem Diagramm sehen wir, wie viele Garbage-Collection-Operationen von Anweisungen durchgeführt wurden, die zum Zeitpunkt der Momentaufnahme ausgeführt wurden.
Speichernutzung für Anweisungen
Im Gegensatz zu den aggregierten Speichernutzungsstatistiken für Attachments kann die Speichernutzung von Anweisungen uns eine Liste der genauen Anweisungen zeigen, die im Moment viel Speicher verbrauchen.
Attachments
Die dritte Registerkarte ist «Attachments». Sie können diese Registerkarte direkt öffnen, indem Sie auf einen der Datensätze in «Aggregierte Leistungsstatistiken» klicken.
Attachments zeigt eine Liste der Benutzer, die mit der Firebird-Datenbank verbunden sind, mit vielen nützlichen Details: BENUTZER und ROLLE des Attachments, Startzeit und ID des Attachments, ob Garbage Collection für das Attachment aktiviert ist, Name des Remote-Prozesses, der das Attachment hergestellt hat, sowie mehrere akkumulierte Leistungszähler für das Attachment: Anzahl der sequenziellen Lesevorgänge [seit dem Start des Attachments], Anzahl der indizierten Lesevorgänge, Anzahl der Inserts, Updates und Deletes sowie Backouts, Purges und Expunges.
Standardmäßig sind einige Spalten der Attachments deaktiviert, um nur die wichtigsten Informationen anzuzeigen.
Natürlich können Sie bei jedem Klick auf ein Attachment zu den darin laufenden Transaktionen und dann zu den Anweisungen springen. Es gibt ein Kontrollkästchen in der oberen linken Ecke der Registerkarten Transaktionen und Anweisungen, das das Verhalten steuert - wenn es aktiviert ist, werden nur Transaktionen und Anweisungen angezeigt, die mit der ausgewählten Attachment-ID markiert sind.
Transaktionen
Die Registerkarte «Transaktionen» zeigt aktive Transaktionen zum Zeitpunkt der Momentaufnahme. Wenn das Kontrollkästchen «Mit ausgewähltem Attachment verknüpfen» aktiviert ist, werden nur Transaktionen für das ausgewählte Attachment angezeigt, andernfalls werden alle Transaktionen angezeigt.
Eines der wichtigsten Merkmale ist die Lebensdauer von Transaktionen: Da Firebird für kurze Schreibtransaktionen ausgelegt ist, ist es wichtig, diese so kurz wie möglich zu halten. FBMonLogger hebt Transaktionen mit Isolationsmodi und Lese-/Schreibeinstellungen hervor, die die älteste aktive Transaktion halten und dadurch verhindern, dass übermäßige Datensatzversionen gelöscht werden. Wenn Sie eine solche Transaktion sehen und sie vor einiger Zeit gestartet wurde, bedeutet dies, dass sie für übermäßige Datensatzversionen verantwortlich sein kann.
Sortieren Sie nach der Spalte «gestartet um» und suchen Sie nach alten Transaktionen, die rot markiert sind: Alle beschreibbaren Transaktionen und schreibgeschützten Snapshots halten die älteste aktive Transaktion fest und verursachen, dass übermäßige Datensatzversionen gehalten werden. Identifizieren Sie, wo diese Transaktionen gestartet wurden (Rechtsklick und «Übergeordnetes Attachment anzeigen» auswählen) und korrigieren Sie Ihren Code, um diese Transaktion früher zu committen.
Anweisungen
Die Registerkarte «Anweisungen» zeigt Anweisungen, die zum Zeitpunkt der Momentaufnahme aktiv waren: Wenn Sie alle Anweisungen erfassen müssen, sollten FBPerfMon oder FBScanner verwendet werden (alle diese Werkzeuge sind Teil des IBSurgeon Optimization Pack).
Wenn «Mit ausgewähltem Attachment verknüpfen» aktiviert ist, werden nur Anweisungen für das spezifische Attachment angezeigt, andernfalls sind alle aktiven Anweisungen in der Liste.
Einige Anweisungen haben keine zugehörige Transaktions-ID (=0): Diese Abfragen sind vorbereitet, aber nicht ausgeführt.




