====== Poprawa Wydajności FirebirdSQL ====== **Aby zoptymalizować działanie FirebirdSQL, kluczowe jest skonfigurowanie odpowiednich ustawień systemu operacyjnego na serwerze. ** **Poniżej znajdziesz szczegółowe kroki, które pomogą Ci zwiększyć wydajność Twojej bazy danych Firebird, zarówno na systemach Windows, jak i Linux.** ''**SYSTEM WINDOWS**'' Włącz "Ultimate Performance" lub "High Performance" Zmień plan zasilania na "High Performance" (lub Ultimate, jeśli jest dostępny). To może zwiększyć wydajność procesora nawet o 20%, ponieważ sprawia, że rdzenie CPU działają szybciej przy wyższym zużyciu energii. Aby zmienić plan zasilania, przejdź do ustawień energii Windows ("Opcje zasilania") i wybierz "High performance" (zamiast "Balanced", który jest zwykle domyślny). Nie ma potrzeby restartowania Firebird ani ponownego uruchamiania serwera, efekt jest stosowany natychmiast. Należy jednak zauważyć, że aktualizacja Windows czasami resetuje to ustawienie do domyślnego "Balanced". {{:pl:administrator:ultimate_performance_lub_high_performance.png?400|}} Włącz opcję "Zezwalaj usłudze na interakcję z pulpitem" dla usługi Firebird Ta opcja jest absolutnie konieczna dla Firebird 2.5 z architekturą Classic i będzie pomocna również dla innych architektur, szczególnie dla baz danych Firebird z dużą liczbą połączeń. Aby zobaczyć efekt, konieczne jest ponowne uruchomienie wszystkich instancji Firebird. {{:pl:administrator:zezwalaj_usludze_na_interakcje_z_pulpitem.png?400|}} Sprawdź politykę buforowania zapisu dla wszystkich dysków Jeśli nie masz RAID, SAN ani innego złożonego urządzenia pamięci masowej, upewnij się, że Windows ma włączone buforowanie zapisu. Kliknij prawym przyciskiem myszy na dysk, wybierz Właściwości, i zakładkę Zasady. Opcja "Włącz buforowanie zapisu na urządzeniu" powinna być włączona. Nie ma potrzeby ponownego uruchamiania Windows, chyba że będzie to wyraźnie wymagane. {{:pl:administrator:sprawdz_polityke_buforowania_zapisu_dla_wszystkich_dyskow.png?400|}} Poniższe rekomendacje są oparte na praktycznych obserwacjach wsparcia IBSurgeon: Rozmiar pliku wymiany. Zalecaną opcją jest pozwolenie Windows na definiowanie rozmiaru pliku wymiany. Jeśli zdecydujesz się ograniczyć plik wymiany, upewnij się, że jest ustawiony na co najmniej 32 GB. Nigdy nie wyłączaj pliku wymiany! Czas pracy. Uruchamiaj ponownie swój serwer Windows lub maszynę wirtualną co najmniej raz na 180 dni. ''**SYSTEM LINUX**'' Zwiększ MaxOpenFiles Instancja Firebird z dużą liczbą połączeń będzie wymagała zwiększenia liczby otwartych plików (uchwytów). Sprawdź wartość MaxOpenFiles za pomocą następującego polecenia: cat /proc/firebird_process_id/limits Domyślnie jest to 4096, zwiększ to w razie potrzeby do 49999. Ustaw to w pliku usługi Firebird /usr/lib/systemd/system/firebird-superserver.service, lub in/usr/lib/systemd/system/firebird LimitNOFILE=49999. Sprawdź i zwiększ VMA, jeśli to konieczne Instancje Firebird z dużą liczbą połączeń, z architekturą SuperServer i SuperClassic mogą wymagać wielu Obszarów Pamięci Wirtualnej (VMA). Sprawdź liczbę VMA za pomocą polecenia: cat /proc/sys/vm/max_map_count Domyślnie jest to 64K, powinno być ustawione na 250K. Aby to zwiększyć, dodaj następującą linię do /etc/sysctl.conf: vm.max_map_count=262144 Aby zastosować, uruchom ponownie serwer lub, aby zastosować natychmiast, wykonaj: sysctl -w vm.max_map_count=262144 Należy pamiętać, że aby to ustawienie było trwałe, trzeba zmienić plik sysctl.conf! Opcjonalne kroki dla Linux Sprawdź, czy masz wystarczająco dużo miejsca w /tmp. Zalecamy mieć co najmniej 50 GB. Firebird przechowuje pliki tymczasowe w /tmp i /tmp/firebird, i mogą one być dość duże. Jeśli używasz Firebird HQbird z opcją BlobTempSpace, tam będą przechowywane tymczasowe pliki Blob. Czas pracy. Uruchamiaj ponownie swój serwer co najmniej raz na 90 dni. Swap. Nigdy nie wyłączaj swapu na Linuxie. ''**OPTYMALNE PLIKI KONFIGURACYJNE**'' Aby uzyskać najlepszą wydajność swojej bazy danych Firebird, kluczowe jest stworzenie optymalnych plików konfiguracyjnych firebird.conf i databases.conf. Przejdź do Configuration Calculator for Firebird https://cc.ib-aid.com/democalc.html. {{:pl:administrator:config.png?400|}} Wybierz wersję Firebird, architekturę, a następnie wprowadź szczegóły dotyczące Twojego sprzętu lub maszyny wirtualnej (RAM, rdzenie CPU) oraz charakterystyki bazy danych i obciążenia, takie jak rozmiar bazy danych i rozmiar strony bazy danych. Kliknij "Utwórz", aby wygenerować optymalną konfigurację. Skopiuj wyniki i wklej je do swoich plików firebird.conf i databases.conf. Upewnij się, że przed tym krokiem usuniesz wszystkie istniejące treści z tych plików, włącznie z komentarzami, aby uniknąć konfliktów między starymi a nowymi ustawieniami. Poprawne skonfigurowanie tych plików pomoże Ci w pełni wykorzystać możliwości Twojego serwera Firebird, zapewniając jego maksymalną wydajność. Bardzo ważna rzecz! Upewnij się, że nie masz wartości dla linii Page Buffers w nagłówku swojej bazy danych! Aby to sprawdzić, uruchom w terminalu (wiersz poleceń): /opt/firebird/bin/gstat -h /path/to/database.fdb lub (na Windows) \gstat.exe -h Disk:Pathtodatabase.fdb Wynik będzie wyglądał tak: Gstat execution time Mon Nov 28 11:25:03 2022 Database header page information: Flags 0 Generation 5914 System Change Number 0 Page size 16384 ODS version 12.0 Oldest transaction 6194 Oldest active 6195 Oldest snapshot 6195 Next transaction 6220 Sequence number 0 Next attachment ID 63 Implementation HW=AMD/Intel/x64 little-endian OS=Windows CC=MSVC Shadow count 0 Page buffers 0 Next header page 0 Database dialect 3 Creation date Nov 24, 2022 16:42:58 Attributes Variable header data: Sweep interval: 20000 Database GUID: {260809FC-FFF7-488F-7ABF-FEF0A84F6900} *END* Gstat completion time Mon Nov 28 11:25:03 2022 Sprawdź, czy linia z parametrem Page Buffers ma wartość 0. Jeśli jest ustawiona na inną wartość, nadpisze ustawienia w plikach firebird.conf i databases.conf. Aby użyć wartości z konfiguracji, ustaw Page Buffers w nagłówku na 0 za pomocą polecenia: gfix -buff 0 /path/to/database.fdb -user SYSDBA -pass masterkey Aby zastosować nową konfigurację, ponownie uruchom wszystkie instancje Firebird. W rezultacie zobaczysz poprawioną wydajność instancji Firebird. ''**WYDAJNOŚĆ DYSKU**'' Jedną z częstych przyczyn spowolnienia bazy danych Firebird jest zbyt wolny dysk, na którym przechowywane są dane. Ważne jest, aby dysk był szybki, ponieważ baza danych Firebird przechowuje i odczytuje dane właśnie z niego. Przetestuj, jak dobrze działa Twój dysk z bazą danych Firebird. Istnieje kilka uniwersalnych narzędzi do pomiaru wydajności dysku w standardowy sposób, które podają szacunkowe wartości w MB/s lub IOPS. Najpopularniejszym z nich jest CrystalDiskMark (https://crystalmark.info/). Z naszych doświadczeń wynika, że CrystalDiskMark daje odpowiednie oszacowanie prędkości dysku i może być używany jako punkt wyjścia. Przykład wyników z CrystalDiskMark w formacie tekstowym: {{:pl:administrator:cristaldisk.png?400|}} Test prędkosci Test prędkości na serwerze z dowolnym Firebirdem Aby uruchomić test na dowolnym serwerze Firebird, skopiuj skrypt z witryny: Simple Insert Update Delete Test for Firebird i zapisz go do pliku, na przykład /opt/script1.sql lub c:\temp\script1.sql. https://ib-aid.com/en/simple-insert-update-delete-test-for-firebird/#how_to_run_firebird_performance_test Następnie edytuj ścieżkę w pierwszej linii skryptu do tworzonej bazy danych - powinna znajdować się na tym samym dysku, gdzie znajduje się główna baza danych: create database "localhost::inserttest4.fdb" user "SYSDBA" password "masterkey" page_size 16384; lub, dla Linuxa create database "localhost://inserttest4.fdb" user "SYSDBA" password "masterkey" page_size 16384; Unikaj sytuacji, gdy testowany dysk jest obciążony długotrwałą operacją, taką jak tworzenie kopii zapasowej lub kopiowanie dużych wolumenów danych, lub po prostu ma szczytową liczbę użytkowników. Najlepszą opcją jest uruchomienie skryptu w trybie bez użytkowników. Uruchom skrypt z wiersza poleceń za pomocą polecenia, jak poniżej: /opt/firebird/bin/isql -i /opt/script1.sql lub "C:\Program Files\Firebird\Firebird_4_0\isql.exe" -i .\script1.sql Wynik zostanie wyświetlony na ekranie (pokazano tylko pierwszą część dla INSERT): C:\HQbird\Firebird30> isql -i c:\Temp\test1.sql Use CONNECT or CREATE DATABASE to specify a database INSERTED_ROWS 1000000 ELAP_MS 58890 Current memory = 702384256 Delta memory = 3215392 Max memory = 704756112 Elapsed time= 58.894 sec Buffers = 40960 Reads = 9 Writes = 88015 Fetches = 25332353 Current memory = 702342416 Delta memory = -41840 Max memory = 704756112 Elapsed time= 4.846 sec Buffers = 40960 Reads = 1 Writes = 40254 Fetches = 2 Jak interpretować wyniki Należy sumować czas operacji i czas zatwierdzania, a następnie podzielić 1000000 przez całkowity czas. Dla powyższego przykładu: INSERT SPEED = 1000000 / (58.984+4.846) = 15666 inserts/sekunda Wyniki w formie Operacji na sekundę — na przykład 6000 Insertów/sekundę, 5200 Update'ów/sekundę, 7300 Delete'ów/sekundę, mogą być porównywane z tabelą/wykresem wyników wydajności. Tabela znajduje się tutaj: https://ib-aid.com/images/testresult/insert_update_delete_results.xls Jeśli wyniki są powyżej średniej w tabeli/wykresie, oznacza to, że prędkość dysku jest w porządku, a przyczyna wolnego działania leży w innej sferze niż sprzęt. Inną rzeczą do sprawdzenia jest czas zatwierdzania. Jeśli całkowity czas testu zawiera więcej niż 20% czasu zatwierdzania, oznacza to, że może występować problem z buforowaniem zapisu. Jeśli wynik testu jest poniżej średniej, a masz dyski SSD, oznacza to, że występuje problem z konfiguracją dysku lub sterownikiem. Możliwe przyczyny wolnego działania dysku - Nieprawidłowy system plików dla dysku, na którym znajduje się baza danych Firebird - Brak jednostki podtrzymującej zasilanie dla RAID (lub rozładowana bateria) - Brak odpowiedniego sterownika (lub sterownik jest wyłączony przez dostawcę, aby uniemożliwić korzystanie z dysków konsumenckich na systemie serwerowym) - Limit IOPS dla VM (na przykład, Azure ma bardzo niskie limity IOPS dla maszyn wirtualnych ogólnego przeznaczenia) - Aktywny proces tworzenia kopii zapasowej lub inne przetwarzanie (kopiowanie, reorganizacja itp.) dużych danych na dysku. - Dysk zaczyna się psuć: uszkodzone bloki, przegrzewanie się itp. Zawsze sprawdzaj dane S.M.A.R.T dla dysku