FirebirdSQL: interne Dateien, temporäre Dateien und Umgebungsvariablen
by Vasily Sidorov, 2. September 2022, IBSurgeon
Erfahrene Firebird-DBAs wissen, dass Firebird eine beträchtliche Menge an Speicherplatz für interne und temporäre Dateien benötigen kann. Die empfohlene Größe des Speicherplatzes für temporäre Dateien im Produktionssystem beträgt 30-40 GB, bei Hochlastsystemen kann sie jedoch auch größer sein.
In diesem Artikel beschreiben wir die Arten von internen und temporären Firebird-Dateien und betrachten außerdem, wie sie über Konfigurationsparameter und Umgebungsvariablen des Betriebssystems gespeichert und verwaltet werden. Der Artikel setzt die Artikelserie und Materialien fort, die sich mit der Beherrschung der Installation und Konfiguration von Firebird befassen.
Wichtiger Hinweis der Firebird-Kernentwickler:
Setzen oder ändern Sie niemals, niemals, NIEMALS die Umgebungsvariable FIREBIRD_LOCK - es sei denn, Sie wissen SEHR GENAU, was Sie tun.
Ausdrücklicher Vorschlag des IBSurgeon-Teams:
Ändern Sie FIREBIRD_LOCK nicht.
Für andere temporäre Dateien - siehe hier.
Interne Dateien in Firebird
Interne Dateien sind Dateien, die Firebird zur Durchführung seiner internen Operationen verwendet. Diese Dateien sollten nicht von Benutzern oder Drittanbieter-Software geändert oder berührt werden. Die folgenden Informationen dienen nur als Referenz.
Das allgemeine Benennungsmuster interner Dateien
Firebird verwendet intern das Präfix fbNN_, wobei NN sein kann:
- die Haupt-ODS-Nummer (ON-Disk Structure) (ODS 12 für Firebird 3.0, ODS 13 für Firebird 4.0), d.h. die Datei beginnt mit fb13.
- NN kann die verkürzte Versionsnummer sein - z.B. kann die Datei mit fb50 beginnen.
Außerdem kann es das Präfix fb_ geben, das auch für temporäre Dateien verwendet wird.
Arten interner Dateien in Firebird
Es gibt die folgenden Haupttypen interner Dateien in Firebird:
- fb_lock_ - Sperrdateien - Dateien, die vom Firebird-Sperrmanager verwendet werden
- fbNN_monitor_ - Dateien mit Daten der Überwachungstabellen
- fbNN_trace_ - Datei mit Daten für Trace-Sitzungen
- fb_event_ - Datei mit gespeicherten Puffern von Ereignissen
- fb_user_mapping - Dateien mit Benutzerzuordnungsdaten
- Dateien mit internen Daten für Trace-Sitzungen
- Flag-Dateien (Größe Null)
- fb_repl_ - Replikationsdateien
Betrachten wir die internen Firebird-Dateien im Detail.
Sperrdateien
Sperrdateien haben das Präfix fb_lock_. Sie werden vom Sperrmanager von Firebird verwendet, um den Zugriff auf Objekte innerhalb der Firebird-Datenbank und zwischen Firebird-Instanzen zu synchronisieren.
Sperrdateien werden beim Öffnen einer Datenbankdatei erstellt und beim Schließen gelöscht.
Standardmäßig wird die Datenbankdatei geschlossen, wenn die letzte Verbindung getrennt wird. Ab Firebird 3.0 ist es möglich, eine Datenbankdatei in Firebird nach dem Trennen der letzten Verbindung mithilfe der LINGER-Option geöffnet zu halten.
Die Anfangsgröße der Sperrdatei wird durch den Parameter LockMemSize in firebird.conf festgelegt. Die Arbeitsgröße variiert je nach Architektur: SuperServer verwendet Sperrdateien weniger intensiv als Classic und SuperClassic. Die typische Größe der Sperrtabelle beträgt etwa 30-50 MB, aber bei Servern mit Tausenden von Verbindungen in Classic/SuperClassic kann die Größe der Sperrdateien auf bis zu 2 GB anwachsen. 2 GB ist die Implementierungsgrenze für Sperrdateien in Vanilla-Firebird.
Dateien mit Daten aus Überwachungstabellen
Ab Version 2.1 verfügt Firebird über Überwachungstabellen. Diese Tabellen werden nicht in der Datenbank gespeichert; Überwachungsdaten werden auf Anfrage gesammelt und in internen Dateien mit dem Namensmuster fbNN_monitor_ aufbewahrt.
Die Größe der Dateien mit Überwachungstabellendaten hängt von der Anzahl der Verbindungen und deren Aktivität ab (Transaktionen, Anweisungen, gespeicherte Prozeduren usw.). Auch Anzahl und Größe der fb_NN_monitor_-Dateien hängen von der Anzahl der Anfragen an Überwachungstabellen von verschiedenen Verbindungen ab (dies ist einer der Gründe, warum Sie MON$-Tabellen nicht für Nicht-Überwachungsaufgaben verwenden sollten).
Dateien mit Daten für Trace-Sitzungen
Das Dateinamensmuster fbNN_trace_ enthält den Link zur aktiven Trace-Sitzungsdatei. Dateien mit dem Namensmuster fb_trace_ enthalten Informationen über die Trace-Sitzung. Es handelt sich um eine Art Puffer für Trace-Daten. Die maximale Größe der fb_trace-Datei ist durch den Parameter MaxUserTraceLogSize in firebird.conf begrenzt. Wenn dieser Puffer überfüllt wird, wird die Trace automatisch ausgesetzt.
Datei für Ereignispuffer
Dateien mit dem Namensmuster fb_event_ sind Puffer, in denen Firebird nicht zugestellte Ereignisse an Client-Anwendungen speichert.
Dateien mit Benutzerzuordnungsdaten
Dateien fb_user_mapping werden verwendet, um Benutzerzuordnungen in Firebird-Instanzen zu cachen.
Flag-Dateien
Unter POSIX verwendet Firebird Flag-Dateien mit der Größe Null - fb_guard, fb_init, fb_port_NUMBER. Diese Dateien werden beim Start von Firebird verwendet.
Replikationsdateien
In Firebird 4 und HQbird enthalten Dateien fb_repl_ die internen Daten für die Replikationsprozesse.
Speicherort interner Dateien
Standardmäßig werden alle internen Firebird-Dateien im selben Ordner gespeichert: unter Windows ist dies C:\ProgramData\firebird, unter Linux /tmp/firebird. Bitte beachten Sie, dass der Ordner über ausreichende Berechtigungen verfügen sollte, damit die Firebird-Instanz dort Dateien erstellen und damit arbeiten kann!
Es ist möglich, den Speicherort des Ordners mit internen Firebird-Dateien durch Definieren der Umgebungsvariable FIREBIRD_LOCK zu ändern, wir empfehlen dies jedoch nicht.
BITTE BEACHTEN: Um Datenbankkorruption zu vermeiden, sollten alle Firebird-Prozesse, die dieselbe Datenbankdatei öffnen, mit demselben FIREBIRD_LOCK arbeiten. Bitte erstellen Sie diese Variable nicht und verwenden Sie die Standard-Speicherorte.
Größe interner Dateien
Praktisch beträgt die Gesamtgröße der internen Firebird-Dateien etwa 100-200 MB, maximal bekannt sind bis zu 2 GB.
Temporäre Dateien in Firebird
Temporäre Dateien werden von der Firebird-Engine erstellt, um temporäre Daten zu speichern, die als Ergebnis von Benutzeroperationen entstehen - z.B. Abfragen mit DISTINCT. Temporäre Dateien können in Hochlast-Produktionssystemen sehr groß werden, daher ist es für erfahrene DBAs notwendig, die Arten temporärer Dateien zu erkennen und bei Bedarf die Firebird-Konfiguration anzupassen oder Speicherplatz für temporäre Dateien bereitzustellen.
Speicherort temporärer Dateien in Firebird
Firebird erstellt temporäre Dateien in dem Ordner, der durch die Umgebungsvariablen FIREBIRD_TMP, TEMP, TMP (in dieser Reihenfolge) angegeben wird. Wenn solche Variablen nicht vorhanden sind, werden temporäre Dateien unter Windows in C:\Temp oder unter Linux in /tmp erstellt.
Praktisch sehen wir unter Windows Firebird-Temp-Dateien in C:\Windows\Temp (entspricht der Umgebungsvariable TEMP), unter Linux in /tmp.
Arten temporärer Dateien in Firebird
Es gibt die folgenden temporären Dateien (alle verwenden das Präfix fb_):
- fb_table_ - Tabellenobjekte, einschließlich, aber nicht beschränkt auf, temporäre Tabellen
- fb_blob_ - BLOBs und autonome Transaktionen
- fb_undo_ - Undo-Daten
- fb_recbuf_ - wird verwendet, um Zwischendaten in aktiven Abfragen, virtuellen Tabellen usw. zu halten
- fb_merge_ - Daten für Hash-Joins
- fb_sort_ - Sortierungen (für Abfragen mit DISTINCT/ORDER BY/GROUP BY und zum Erstellen/Neuerstellen von Indizes)
- fb_tpc_ - Daten - ab v4, Liste aller bekannten Transaktionen mit zugehörigen Commit-Nummern
- fb_snap_ - Daten für - ab v4, Liste aller aktiven Datenbank-Snapshots
Wie kann der Speicherort temporärer Dateien geändert werden?
Für Firebird-Versionen vor 4 ist es möglich, mit dem Firebird-Konfigurationsparameter TempDirectories einen bestimmten Ordner für temporäre Dateien der Typen 4-8 festzulegen.
Für Firebird 4 und höher ermöglicht der neue Konfigurationsparameter TempTableDirectory die Angabe eines Ordners für temporäre Tabellen der Typen 1-3. Er kann in firebird.conf und in databases.conf festgelegt werden.
Umgebungsvariablen für Firebird
Firebird kann die folgenden Betriebssystem-Umgebungsvariablen verwenden (falls definiert):
- FIREBIRD - Ordner mit Firebird-Konfigurationsdateien
- FIREBIRD_LOCK - Ordner mit internen Dateien
- FIREBIRD_MSG - Ordner mit der Nachrichtendatei (firebird.msg)
- FIREBIRD_TMP - Ordner für temporäre Dateien
Praktisch ist FIREBIRD_TMP die einzige Variable, deren Definition sinnvoll ist, wenn Sie einen wichtigen Grund haben, temporäre Dateien an einem bestimmten Nicht-Standard-Speicherort zu speichern.
Bitte beachten Sie, dass ein ungültiger Pfad in FIREBIRD_TMP (nicht vorhanden oder unzureichende Berechtigungen) zu kritischen Fehlern führt, die die Arbeit von Firebird verhindern.
Wichtiger Hinweis der Firebird-Kernentwickler:
Setzen oder ändern Sie niemals, niemals, NIEMALS die Umgebungsvariable FIREBIRD_LOCK - es sei denn, Sie wissen SEHR GENAU, was Sie tun.
Ausdrücklicher Vorschlag des IBSurgeon-Teams:
Ändern Sie FIREBIRD_LOCK niemals. Diese Informationen dienen nur als Referenz.
Für andere temporäre Dateien - siehe hier.
Statt einer Zusammenfassung: Antwort auf die sehr häufige Frage
Viele DBAs fragen - sollten wir ein RAM-Laufwerk oder tmpfs verwenden, um interne und/oder temporäre Firebird-Dateien zu speichern?
Die kurze Antwort lautet: Nein, besser die Firebird-Konfiguration optimieren. Wenn Sie viel Speicher haben, können Sie den Wert für DefaultDBCachePages erhöhen (nur für SuperServer) und TempCacheLimit erhöhen (in Versionen 3+ erlaubt Firebird die Verwendung von TempCacheLimit über 2 GB).
Wenn Sie sich nicht sicher sind, welche Werte verwendet werden sollten, verwenden Sie bitte den Firebird Configuration Calculator, der optimale und sichere Konfigurationen für spezifische Hardware-/VM-Parameter erstellt.
Die längere Antwort: Firebird ist so konzipiert, dass der größte Teil der temporären und internen Dateien im Speicher gehalten wird, aber da es praktisch Situationen gibt, in denen temporäre Objekte sehr groß werden, verfügt es auch über einen Mechanismus, um sie auf der Festplatte zu speichern. Firebird nutzt effektiv Betriebssystemmechanismen (mmap, Dateisystem-Cache, temporäre Dateien usw.), um temporäre und interne Dateien im Speicher zu cachen, wenn dies möglich und sinnvoll ist. Die Optimierung von Firebird sollte zuerst über die Firebird-Konfiguration erfolgen und dann über das Betriebssystem (Festlegen des Speicherorts temporärer Dateien, verschiedene Optionen für die Dateicache-Optimierung usw.).
Verwandte Links
Videos:
- Speichernutzung in Firebird. Teil 1: Speichernutzung verstehen
- Speichernutzung in Firebird: Teil 2. Speichernutzung optimieren
Präsentation zur Optimierung der Speichernutzung
Bitte zögern Sie nicht, Fragen zu stellen oder Feedback an [email protected] zu senden.