FirebirdSQL logo

MON$IO_STATS verwenden

Wie oben bereits angegeben, kann die Tabelle MON$IO_STATS genutzt werden, um zu bestimmen, wie gut Ihr Buffer-Cache arbeitet. Die Tabelle hat folgende Struktur:

MONS$STAT_ID

Die Statistik-ID.

MONS$STAT_GROUP

Die statistische Gruppe. Statistiken werden in folgende Gruppen unterteilt:

  • 0: Die Datenbank als Ganzes.

  • 1: Attachments.

  • 2: Transaktionen.

  • 3: Statements.

  • 4: Aufrufe (Calls).

MON$PAGE_READS

Die Anzahl der gelesenen Seiten. Dies sind die Seiten, die von der Festplatte und nicht aus dem Arbeitsspeicher gelesen wurden.

MON$PAGE_WRITES

Die Anzahl der auf die Festplatte zurückgeschriebenen Seiten.

MON$PAGE_FETCHES

Die Anzahl der Seiten, die aus dem Cache gelesen wurden, im Gegensatz zu denen von der Festplatte.

MON$PAGE_MARKS

Die Anzahl der im Cache geänderten Seiten. Es ist möglich, dass nicht alle zurück auf die Festplatte geschrieben wurden.

Um die derzeitigen Statistiken für die gesamte Datenbank zu untersuchen, verwenden wir folgende Abfrage in isql:

tux> isql employee
Database:  employee

SQL> SELECT MON$PAGE_READS, MON$PAGE_WRITES, MON$PAGE_FETCHES, MON$PAGE_MARKS
CON> FROM MON$IO_STATS
CON> WHERE MON$STAT_GROUP = 0;

     MON$PAGE_READS     MON$PAGE_WRITES    MON$PAGE_FETCHES      MON$PAGE_MARKS
=================== =================== =================== ===================
                134                 526               13851                 529

Das erzeugte Resultat zeigt, dass

  • 134 Seiten von der Festplatte in den Cache gelesen werden mussten.

  • 13.851 Seiten, auf der anderen Seite, wurden direkt aus dem Cache gelesen.

  • 529 Seiten im Cache, wurden auf irgendeinem Wege geändert.

  • 526 geänderte Seiten vom Cache auf die Festplatte kopiert wurden.

Hieraus können wir erkennen, dass obwohl eine kleine Anzahl Seiten in den Cache gelesen wurde, wir nichts tun können, um dies zu vermeiden. Sobald die Datenbank gestartet wird, ist der Cache leer, wenn aber eine Anwendung eine Verbindung herstellt, werden verschiedene Seiten gelesen und in der Cache gefüllt, wodurch physikalische Leseoperationen durchgeführt werden. In diesem Beispiel scheint es so zu sein, dass sobald Seiten im Cache vorhanden sind, diese auch relativ häufig verwendet werden. Auf jede physikalische Leseoperation kommen ungefähr 103 Leseoperationen aus dem Cache durchgeführt.

Von den 529 aktualisierten Seiten - und dies sind sowohl System- wie auch Benutzerseiten - wurden 526 zurück auf die Festplatte geschrieben, während 3 Seiten immer noch im Cache verbleiben, noch ungeschrieben.

Das obige Beispiel zeigt die Performance des Caches während der Datenbanklaufzeit. Wir können dies auf unser aktuelles Attachment herunterbrechen, indem wir die Abfrage etwas verändern. Wir holen nur die Datensätze, wo MON$STAT_GROUP gleich 1 ist.

SQL> SELECT MON$PAGE_READS, MON$PAGE_WRITES, MON$PAGE_FETCHES, MON$PAGE_MARKS
CON> FROM MON$IO_STATS
CON> WHERE MON$STAT_GROUP = 1;

     MON$PAGE_READS     MON$PAGE_WRITES    MON$PAGE_FETCHES      MON$PAGE_MARKS
=================== =================== =================== ===================
                  0                   4                  87                   5
                134                 520               13619                 522

Die Interpretation der neuen Statistiken ist die gleiche wie für die gesamte Datenbank.

Wir können außerdem eine Statistikdiagnose für Transaktionen durchfühen:

SQL> SELECT MON$PAGE_READS, MON$PAGE_WRITES, MON$PAGE_FETCHES, MON$PAGE_MARKS
CON> FROM MON$IO_STATS
CON> WHERE MON$STAT_GROUP = 2;

     MON$PAGE_READS     MON$PAGE_WRITES    MON$PAGE_FETCHES      MON$PAGE_MARKS
=================== =================== =================== ===================
                  0                   0                  60                   0
                  0                   0                   1                   0
                  0                   0                   1                   0
                  0                   0                  69                   0
                  0                   0                  93                   0
                  0                   0                  85                   0
                  0                   0                   1                   0
                  0                   0                   1                   0

Und auch für Statements:

SQL> SELECT MON$PAGE_READS, MON$PAGE_WRITES, MON$PAGE_FETCHES, MON$PAGE_MARKS
CON> FROM MON$IO_STATS
CON> WHERE MON$STAT_GROUP = 3;

     MON$PAGE_READS     MON$PAGE_WRITES    MON$PAGE_FETCHES      MON$PAGE_MARKS
=================== =================== =================== ===================
                  0                   0                   1                   0
                  0                   0                  38                   0
                  0                   0                   4                   0
                  0                   0                  18                   0
                  0                   0                 158                   0
                  0                   0                   1                   0
                  0                   0                   1                   0
                  0                   0                   1                   0
                  0                   0                   1                   0
                  0                   0                   1                   0
                  0                   0                   0                   0
                  0                   0                   1                   0
                  1                   0                  12                   0
                  0                   0                   2                   0
                  3                   0                1436                   0
                  0                   0                 101                   0
                  7                   0                 613                   0

Schlussendlich ist es möglich - und vermutlich äußerst nützlich - die Statistiken für Ihre eigene Sitzung zu bestimmen. Sie finden Ihre Attachment-ID mittels CURRENT_CONNECTION unter der Verwendung eines Join mit MON$IO_STATS und der Spalte MON$STAT_ID.

SQL> SET LIST;

SQL> SELECT T.MON$ATTACHMENT_ID, T.MON$TRANSACTION_ID,
CON> IO.MON$PAGE_READS, IO.MON$PAGE_WRITES,
CON> IO.MON$PAGE_FETCHES, IO.MON$PAGE_MARKS
CON> FROM MON$TRANSACTIONS AS T
CON> JOIN MON$IO_STATS as IO
CON> ON (IO.MON$STAT_ID = T.MON$STAT_ID)
CON> WHERE T.MON$ATTACHMENT_ID = CURRENT_CONNECTION;

MON$ATTACHMENT_ID               12
MON$TRANSACTION_ID              218
MON$PAGE_READS                  5
MON$PAGE_WRITES                 0
MON$PAGE_FETCHES                66
MON$PAGE_MARKS                  0

MON$ATTACHMENT_ID               12
MON$TRANSACTION_ID              217
MON$PAGE_READS                  0
MON$PAGE_WRITES                 0
MON$PAGE_FETCHES                1
MON$PAGE_MARKS                  0

Appendices

Dokumenthistorie

Die exakte Dateihistorie ist im Git-Repository des firebird-documentation-Repository zu finden; siehe https://github.com/FirebirdSQL/firebird-documentation

Revision History

1.0

5. Jan 2010

ND

Neues Dokument auf Basis eines Postings von Ann Harrison an den Firebird-support.

1.1

21. Jun 2010

ND

Ergänzt, dass es möglich ist, die Statistiken für die aktuelle Verbindung zu erhalten. Im Gegensatz zur vorigen Behauptung.

1.1-de

2. Sep 2013

MK

Deutsche Übersetzung.

1.2

28. Mai 2020

MK

Konvertierung zu AsciiDoc.

1.2-de

28. Mai 2020

MK

Einige Schreibfehler korrigiert. Übersetzung zu AsciiDoc konvertiert.

docnext count = 1

Lizenzhinweis

Der Inhalt dieser Dokumentation unterliegt der "Public Documentation License Version 1.0" (der “License”);die Dokumentation darf nur unter Respektierung dieser Lizenz genutzt werden.Kopien der Lizenz sind verfügbar unter https://www.firebirdsql.org/pdfmanual/pdl.pdf (PDF) und https://www.firebirdsql.org/manual/pdl.html (HTML).

Die Original-Dokumentation trägt den Titel Firebird Database Cache Buffer.

Der ursprünglich Autor der Original-Dokumentation ist: Norman Dunbar unter Verwendung der durch Ann Harrison zur Verfügung gestellten Daten.

Copyright © 2010-2020.Alle Rechte vorbehalten.Kontakt zum Original-Autor: NormanDunbar at users dot sourceforge dot net.

Mitwirkende: Martin Köditz – siehe document history.

Teile erstellt von Martin Köditz unterliegen dem Copyright © 2020.Alle Rechte vorbehalten.Kontakt zum Mitwirkenden: martin dot koeditz at it dash syn dot de.