Firebird-Überwachungstabellen

7

Ich arbeite mit einer Firebird 2.1.1-Datenbank und habe angefangen, über die Überwachungstabellen zu lesen .

Ich versuche irgendwie in Echtzeit zu sehen, welche Abfragen jeder Client in der Datenbank ausführt.

Ich habe mir den MON$STATEMENTSTisch angesehen, aber er liefert nicht viele Informationen. Ich hätte mehr Inhalt in der Tabelle erwartet.

Screenshot von Flamerobin, wenn die Tabelle angezeigt wird

Suche ich am falschen Ort oder habe ich den Zweck / die Verwendung der Firebird-Überwachungstabellen nicht verstanden?

Valentin Despa
quelle

Antworten:

7

Es gibt eine Reihe von Dingen, die Sie wissen müssen, wenn Sie die Überwachungstabellen verwenden:

  1. Die Überwachungstabellen (wie MON$STATEMENTS) enthalten eine Liste der aktiven oder vorbereiteten Anweisungen zum Zeitpunkt der Ausführung einer Abfrage.
  2. Das Abfrageergebnis bleibt stabil, bis die Transaktion festgeschrieben wird! Dies bedeutet, dass das wiederholte Ausführen der Abfrage ohne Festschreiben keine neuen Informationen liefert.
  3. Nur SYSDBAder Datenbankbesitzer oder ein Benutzer mit Rolle RDB$ADMINkann alle Informationen sehen, andere Benutzer können nur Informationen über ihre eigenen Verbindungen sehen.
  4. Ihre Firebird-Installation enthält grundlegende Dokumentation zu den Tabellen in doc/README.monitoring_tables.txt

Nun zu Ihrem Screenshot: Alle Anweisungen stammen aus derselben Verbindung (Ihrer eigenen) : MON$ATTACHMENT_ID = 1521. Derzeit ist nur eine Anweisung aktiv ( MON$STATE = 1) und nimmt an der Transaktion teil MON$TRANSACTION_ID = 90964und wurde am 06.12.2012 um 10:08 Uhr ( MON$TIMESTAMP) gestartet. Der Rest ist inaktiv ( MON$STATE = 0) und hat daher keine Transaktions-ID und keinen Zeitstempel. Die erste Anweisung ist auch die einzige, die derzeit eine tatsächliche Abfrage ( MON$SQL_TEXT) hat. Dies ist die Abfrage, die das Ergebnis im Screenshot tatsächlich erzeugt hat. In Firebird werden Anweisungen getrennt von der tatsächlichen Abfrage zugewiesen, die mit dieser Anweisung ausgeführt werden soll.

Das ist nicht viel, aber wenn Sie angeschlossen hatten MON$RECORD_STATS, MON$IO_STATSoder MON$MEMORY_USAGEbasierend auf MON$STAT_IDSie würden Statistiken über die Abfrage (dh die Anzahl der liest, Datensätze zu aktualisieren, Anzahl der Seiten gelesen oder geschrieben, die Speichernutzung) übermittelt. Die Überwachungstabellen zeigen Informationen zu einem bestimmten Zeitpunkt an. Wenn eine Abfrage bei der Ausführung bereits abgeschlossen ist, erhalten Sie keine Informationen (ich bin nicht 100% sicher, aber sie bleiben möglicherweise bis zur nächsten Ausführung von a verfügbar Aussage oder bis die Aussage unvorbereitet oder geschlossen ist).

Wenn Sie stattdessen einen Strom von Informationen und Statistiken benötigen, können Sie möglicherweise mehr aus der Firebird Trace-API herausholen. Ich habe es selbst noch nicht viel benutzt, aber der Artikel Audit and Trace Services in Firebird 2.5 von Thomas Steinmauer bietet eine gute Einführung.

In Ihrer Frage sagen Sie, Sie hätten "mehr Inhalt" erwartet, aber nicht angegeben, welchen Inhalt Sie benötigen oder erwarten. Ich hoffe das liefert genügend Infos.

Mark Rotteveel
quelle