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”.
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.
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.
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.
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)
<twoja ścieżka bin Firebird>\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:
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:<DISK>:<PATH>inserttest4.fdb" user "SYSDBA" password "masterkey" page_size 16384;
lub, dla Linuxa
create database "localhost:/<path>/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