FirebirdSQL: pliki wewnętrzne, pliki tymczasowe i zmienne środowiskowe
by Vasily Sidorov, 2 września 2022, IBSurgeon
Doświadczeni administratorzy Firebird wiedzą, że Firebird może wymagać dość dużej ilości miejsca na dysku do przechowywania plików wewnętrznych i tymczasowych. Zalecany rozmiar miejsca na dysku dla plików tymczasowych w systemie produkcyjnym to 30-40 GB, ale w systemach o wysokim obciążeniu może być większy.
W tym artykule opiszemy typy wewnętrznych i tymczasowych plików Firebird, a także omówimy, jak są one przechowywane i zarządzane za pomocą parametrów konfiguracyjnych oraz zmiennych środowiskowych systemu operacyjnego. Artykuł kontynuuje serię artykułów i materiałów poświęconych opanowaniu instalacji i konfiguracji Firebird.
Ważna uwaga od twórców rdzenia Firebird:
Nigdy, przenigdy, NIGDY nie ustawiaj\zmieniaj zmiennej środowiskowej FIREBIRD_LOCK - chyba że BARDZO DOBRZE wiesz, co robisz.
Wyraźna sugestia zespołu IBSurgeon:
Nie zmieniaj FIREBIRD_LOCK.
Dla innych plików tymczasowych - zobacz tutaj.
Pliki wewnętrzne w Firebird
Pliki wewnętrzne to pliki używane przez Firebird do wykonywania jego wewnętrznych operacji. Pliki te nie powinny być zmieniane ani dotykane przez użytkowników lub oprogramowanie innych firm. Poniższe informacje służą wyłącznie do celów referencyjnych.
Typowy wzorzec nazewnictwa plików wewnętrznych
Firebird wewnętrznie używa prefiksu fbNN_, gdzie NN może być
- głównym numerem ODS (struktury na dysku) (ODS 12 dla Firebird 3.0, ODS 13 dla Firebird 4.0), tj. plik zaczyna się od fb13.
- NN może być skróconym numerem wersji - np. plik może zaczynać się od fb50.
Może również istnieć prefiks fb_, który jest również używany dla plików tymczasowych.
Typy plików wewnętrznych w Firebird
W Firebird istnieją następujące główne typy plików wewnętrznych:
- fb_lock_ - pliki blokad - pliki używane przez menedżer blokad Firebird
- fbNN_monitor_ - pliki z danymi tabel monitorujących
- fbNN_trace_ - pliki z danymi dla sesji śledzenia
- fb_event_ - plik z buforami zdarzeń
- fb_user_mapping - pliki z danymi mapowań użytkowników
- pliki z danymi wewnętrznymi dla sesji śledzenia
- pliki flagowe (rozmiar zerowy)
- fb_repl_ - pliki replikacji
Rozważmy szczegółowo pliki wewnętrzne Firebird.
Pliki blokad
Pliki blokad mają prefiks fb_lock_. Są one używane przez menedżer blokad Firebird do synchronizacji dostępu do obiektów wewnątrz bazy danych Firebird oraz między instancjami Firebird.
Pliki blokad są tworzone przy otwieraniu pliku bazy danych i usuwane po jego zamknięciu.
Domyślnie plik bazy danych jest zamykany po rozłączeniu ostatniego połączenia. Począwszy od Firebird 3.0, możliwe jest utrzymanie pliku bazy danych otwartego w Firebird po rozłączeniu ostatniego połączenia za pomocą opcji LINGER.
Początkowy rozmiar pliku blokad jest ustawiany przez parametr LockMemSize w firebird.conf. Rozmiar roboczy różni się w zależności od architektury: SuperServer używa plików blokad mniej intensywnie niż Classic i SuperClassic. Typowy rozmiar tabeli blokad to około 30-50 MB, ale dla serwerów z tysiącami połączeń w Classic/SuperClassic rozmiar plików blokad może wzrosnąć do 2 GB. 2 GB to limit implementacyjny dla plików blokad w standardowym Firebird.
Pliki z danymi z tabel monitorujących
Począwszy od wersji 2.1, Firebird ma tabele monitorujące. Tabele te nie są przechowywane wewnątrz bazy danych - dane monitorujące są zbierane na żądanie i przechowywane w plikach wewnętrznych o wzorcu nazwy fbNN_monitor_.
Rozmiar plików z danymi tabel monitorujących zależy od liczby połączeń i ich aktywności (transakcje, instrukcje, procedury składowane itp.). Ponadto liczba i rozmiar plików fb_NN_monitor_ zależą od liczby żądań do tabel monitorujących z różnych połączeń (jest to jeden z powodów, dla których nie należy używać tabel MON$ do zadań niemonitorujących).
Pliki z danymi dla sesji śledzenia
Wzorzec nazwy pliku fbNN_trace_ przechowuje łącze do aktywnego pliku sesji śledzenia. Pliki o wzorcu nazwy fb_trace_ zawierają informacje o sesji śledzenia. Jest to rodzaj bufora dla danych śledzenia. Maksymalny rozmiar pliku fb_trace jest ograniczony parametrem MaxUserTraceLogSize w firebird.conf. Jeśli ten bufor zostanie przepełniony, śledzenie zostanie automatycznie zawieszone.
Pliki dla buforów zdarzeń
Pliki o wzorcu nazwy fb_event_ to bufory, w których Firebird przechowuje niedostarczone zdarzenia do aplikacji klienckich.
Pliki z danymi mapowań użytkowników
Pliki fb_user_mapping są używane do buforowania mapowań użytkowników w instancjach Firebird.
Pliki flagowe
W systemach POSIX Firebird używa plików flagowych o zerowym rozmiarze - fb_guard, fb_init, fb_port_NUMBER. Pliki te są używane podczas uruchamiania Firebird.
Pliki replikacji
W Firebird 4 i HQbird pliki fb_repl_ zawierają dane wewnętrzne dla procesów replikacji.
Lokalizacja plików wewnętrznych
Domyślnie wszystkie pliki wewnętrzne Firebird są przechowywane w tym samym folderze: w systemie Windows jest to C:\ProgramData\firebird, w systemie Linux - /tmp/firebird. Należy pamiętać, że folder powinien mieć odpowiednie uprawnienia, aby instancja Firebird mogła tworzyć i pracować z plikami w tym miejscu!
Możliwe jest zmiana lokalizacji folderu z plikami wewnętrznymi Firebird poprzez zdefiniowanie zmiennej środowiskowej FIREBIRD_LOCK, ale nie zalecamy tego.
UWAGA: aby uniknąć uszkodzenia bazy danych, wszystkie procesy Firebird, które otwierają ten sam plik bazy danych, powinny pracować z tym samym FIREBIRD_LOCK. Prosimy nie tworzyć tej zmiennej i używać domyślnych lokalizacji.
Rozmiar plików wewnętrznych
W praktyce całkowity rozmiar wewnętrznych plików Firebird wynosi około 100-200 MB, maksymalnie do 2 GB.
Pliki tymczasowe w Firebird
Pliki tymczasowe są tworzone przez silnik Firebird do przechowywania danych tymczasowych, które powstają w wyniku operacji użytkowników - na przykład zapytań z DISTINCT. Pliki tymczasowe mogą być bardzo duże w systemach produkcyjnych o wysokim obciążeniu, dlatego doświadczony administrator powinien umieć rozpoznawać typy plików tymczasowych i, w razie potrzeby, dostroić konfigurację Firebird lub przydzielić miejsce na dysku do przechowywania plików tymczasowych.
Lokalizacja plików tymczasowych w Firebird
Firebird tworzy pliki tymczasowe w folderze określonym przez zmienne środowiskowe FIREBIRD_TMP, TEMP, TMP (w tej kolejności). Jeśli takie zmienne nie istnieją, pliki tymczasowe zostaną utworzone w C:\Temp w systemie Windows lub /tmp w systemie Linux.
W praktyce w systemie Windows pliki tymczasowe Firebird można zobaczyć w C:\Windows\Temp (odpowiada zmiennej środowiskowej TEMP), w systemie Linux w /tmp.
Typy plików tymczasowych w Firebird
Istnieją następujące pliki tymczasowe (wszystkie używają prefiksu fb_):
- fb_table_ - obiekty tabel, w tym, ale nie wyłącznie, tabele tymczasowe
- fb_blob_ - obiekty BLOB i autonomiczne transakcje
- fb_undo_ - dane cofania
- fb_recbuf_ - używane do przechowywania danych pośrednich w aktywnych zapytaniach, tabelach wirtualnych itp.
- fb_merge_ - dane dla złączeń hash
- fb_sort_ - sortowania (dla zapytań z DISTINCT/ORDER BY/GROUP BY oraz do tworzenia/odtwarzania indeksów)
- fb_tpc_ - dane - od wersji 4, lista wszystkich znanych transakcji z powiązanymi numerami zatwierdzeń
- fb_snap_ - dane - od wersji 4, lista wszystkich aktywnych migawek bazy danych
Jak zmienić lokalizację plików tymczasowych?
Dla wersji Firebird przed 4, możliwe jest zdefiniowanie konkretnego folderu do przechowywania plików tymczasowych typów 4-8 za pomocą parametru konfiguracyjnego TempDirectories.
Dla Firebird 4 i nowszych, nowy parametr konfiguracyjny TempTableDirectory pozwala określić folder do przechowywania tabel tymczasowych typów 1-3. Można go ustawić w firebird.conf i databases.conf.
Zmienne środowiskowe dla Firebird
Firebird może używać następujących zmiennych środowiskowych systemu operacyjnego (jeśli są zdefiniowane):
- FIREBIRD - folder z plikami konfiguracyjnymi Firebird
- FIREBIRD_LOCK - folder z plikami wewnętrznymi
- FIREBIRD_MSG - folder z plikiem komunikatów (firebird.msg)
- FIREBIRD_TMP - folder na pliki tymczasowe
W praktyce FIREBIRD_TMP jest jedyną zmienną, którą warto zdefiniować, jeśli masz istotny powód, aby przechowywać pliki tymczasowe w konkretnej, niedomyślnej lokalizacji.
Należy pamiętać, że jeśli ścieżka w FIREBIRD_TMP będzie nieprawidłowa (nie istnieje lub brak wystarczających uprawnień), doprowadzi to do krytycznych błędów uniemożliwiających działanie Firebird.
Ważna uwaga od twórców rdzenia Firebird:
Nigdy, przenigdy, NIGDY nie ustawiaj\zmieniaj zmiennej środowiskowej FIREBIRD_LOCK - chyba że BARDZO DOBRZE wiesz, co robisz.
Wyraźna sugestia zespołu IBSurgeon:
Nigdy nie zmieniaj FIREBIRD_LOCK. Ta informacja służy wyłącznie do celów referencyjnych.
Dla innych plików tymczasowych - zobacz tutaj.
Zamiast podsumowania: odpowiedź na bardzo częste pytanie
Wielu administratorów pyta - czy powinniśmy używać dysku RAM lub tmpfs do przechowywania wewnętrznych i/lub tymczasowych plików Firebird?
Krótka odpowiedź brzmi: Nie, lepiej dostroić konfigurację Firebird. Jeśli masz dużo pamięci, możesz zwiększyć wartość DefaultDBCachePages (tylko dla SuperServer) i zwiększyć TempCacheLimit (w wersjach 3+ Firebird pozwala używać TempCacheLimit większego niż 2 GB).
Jeśli nie jesteś pewien, jakie wartości należy zastosować, skorzystaj z Kalkulatora konfiguracji Firebird, który tworzy optymalne i bezpieczne konfiguracje dla konkretnych parametrów sprzętu/VM.
Dłuższa odpowiedź: Firebird jest zaprojektowany tak, aby przechowywać większość plików tymczasowych i wewnętrznych w pamięci, ale ponieważ w praktyce zdarzają się sytuacje, gdy obiekty tymczasowe stają się bardzo duże, ma również mechanizm przechowywania ich na dysku. Firebird skutecznie wykorzystuje mechanizmy systemu operacyjnego (mmap, pamięć podręczna systemu plików, pliki tymczasowe itp.) do buforowania plików tymczasowych i wewnętrznych w pamięci, gdy jest to możliwe i uzasadnione. Dostrajanie Firebird powinno być wykonywane najpierw przez konfigurację Firebird, a następnie system operacyjny (ustawienie lokalizacji plików tymczasowych, różne opcje dostrajania pamięci podręcznej plików itp.).
Powiązane linki
Filmy:
- Użycie pamięci w Firebird. Część 1: Zrozumienie użycia pamięci
- Użycie pamięci w Firebird: Część 2. Dostrajanie użycia pamięci
Prezentacja o dostrajaniu użycia pamięci
Zachęcamy do zadawania pytań lub przesyłania opinii na adres [email protected]