Firebird OLTP-EMULator test
OLTP-EMUL to oficjalny test Firebird, który emuluje realistyczne obciążenie OLTP w Firebird 2.5 i nowszych. Użyj go do sprawdzenia wydajności i regresji przy wielu równoczesnych sesjach ISQL. Przeczytaj uważnie ten przewodnik przed uruchomieniem testu.
Sklonuj repozytorium
Windows
git clone --config core.autocrlf=true https://github.com/FirebirdSQL/oltp-emul
Linux / POSIX
git clone --config core.autocrlf=false https://github.com/FirebirdSQL/oltp-emul
Szybki start na podstawie prac Pavla Zotova (Moskwa). Pytania dotyczące samego testu: [email protected]. Wsparcie IBSurgeon: [email protected].
1. Wymagania wstępne
Na hoście, który będzie uruchamiał sesje ISQL, zainstaluj klienta Firebird i upewnij się, że dostępne są następujące pliki binarne:
isql(w niektórych pakietach POSIX:isql-fb)fbsvcmgr
2. Wybierz i skopiuj plik konfiguracyjny
W folderze src wybierz domyślną konfigurację odpowiadającą głównej wersji Firebird i systemowi operacyjnemu, a następnie skopiuj ją bez sufiksu .default.
| Firebird | OS | Plik konfiguracyjny |
|---|---|---|
| 2.5 | Windows | oltp25_config.win.default |
| 2.5 | Linux | oltp25_config.nix.default |
| 3.0 | Windows | oltp30_config.win.default |
| 3.0 | Linux | oltp30_config.nix.default |
| 4.0 | Windows | oltp40_config.win.default |
| 4.0 | Linux | oltp40_config.nix.default |
# Windows copy .\oltp30_config.win.default .\oltp30_config.winLinux
cp ./oltp30_config.nix.default ./oltp30_config.nix
3. Ważne ustawienia
Edytuj skopiowaną konfigurację. Zwróć szczególną uwagę na:
- fbc - ścieżka do
isqlna maszynie uruchamiającej sesje - clu - opcjonalna niestandardowa nazwa pliku binarnego ISQL (np.
isql-fbw pakietach POSIX) - dbnm - pełna ścieżka i nazwa pliku bazy danych na serwerze (tylko ASCII; nie alias, jeśli chcesz, aby skrypt ją utworzył)
- host, port, usr, pwd - parametry połączenia
- tmpdir - katalog na logi ISQL i tymczasowe pliki testowe
- init_docs - dokumenty do utworzenia przed mierzonym obciążeniem (najpierw spróbuj 3000-5000)
- warm_time / test_time - faza rozgrzewki i pomiaru, w minutach
- sleep_min / sleep_max - pauza między transakcjami (ustaw
sleep_maxna 0, aby wyłączyć pauzy) - sleep_ddl - opcjonalna funkcja UDF do pauz (preferowana zamiast powłoki
sleep/cscript); pliki binarne wutil/udf64/ - wait_for_copy - pauza po inicjalizacji, aby można było zrobić snapshot bazy przed rozgrzewką/pomiarem (przydatne przy powtarzanych uruchomieniach)
Po inicjalizacji test uruchamia rozgrzewkę przez warm_time minut, a następnie mierzy przez test_time minut.
4. Windows i wskazówki dotyczące firebird.conf
Wyklucz skanowanie antywirusowe / systemowe z tmpdir oraz z folderów tymczasowych Firebird (FIREBIRD_TMP / TMP / TEMP oraz TempDirectories w firebird.conf). Dopasowanie FIREBIRD_TMP do TempDirectories zmniejsza spowolnienia przy wielu sesjach ISQL.
Zwiększ co najmniej:
DefaultDbCachePagesLockHashSlotsLockMemSizeFileSystemCacheThreshold- musi być ustawione jawnie i większe niżDefaultDbCachePages(test odrzuca brakującą/skomentowaną wartość, z wyjątkiem niektórych układów pakietów POSIX)
Celuj w około 25% pamięci RAM na pamięć podręczną stron. Nie ustawiaj DefaultDbCachePages powyżej 2048 dla Classic / SuperClassic. Rozmiar strony jest na sztywno ustawiony na 8192.
Przykład średniego obciążenia (~100 sesji):
| Parametr | SuperServer 3.0+ | [Super]Classic 3.0+ | [Super]Classic 2.5 |
|---|---|---|---|
DefaultDbCachePages |
~0.25 × RAM / 8192 | 1024 | 1024 |
LockHashSlots |
8191 | 16001 | 16001 |
LockMemSize |
4194304 | 16777216 | 16777216 |
Gotowe konfiguracje znajdziesz w Kalkulatorze konfiguracji oraz konfiguracjach referencyjnych.
5. Uruchom test
Otwórz powłokę, przejdź do src i uruchom:
1run_oltp_emul <FbMajor> <NumSessions> [nostop]
- FbMajor -
25,30lub40dla Firebird 2.5 / 3.0 / 4.0 - NumSessions - liczba sesji ISQL do uruchomienia
- nostop - opcjonalnie; pomija interaktywne pauzy (przydatne przy użyciu harmonogramu)
Jeśli plik bazy danych nie istnieje, a dbnm jest pełną ścieżką (nie aliasem), skrypt może go utworzyć. Niekompletne lub puste poprzednie bazy są odtwarzane w razie potrzeby.
6. Raporty i zatrzymywanie
Po czasie rozgrzewki + pomiaru sesje zatrzymują się automatycznie. Pierwsza sesja ISQL zapisuje końcowy raport w tmpdir. Przy make_html = 1 w systemie Windows generowany jest również raport HTML (wolniejszy).
Nazewnictwo raportów zależy od file_name_with_test_params:
- Skomentowane (domyślnie) - np.
oltp**.report.txt regular- nazwy ze znacznikiem czasu, odpowiednie do przeglądania wielu uruchomień na liście folderówbenchmark- nazwy odpowiednie do porównywania wariantów ustawień/DDL
Raporty zawierają architekturę i ustawienia, ogólną i per-interwał wydajność (CNT_OK_PER_MINUTE / AVG_TIMES_PER_MINUTE), opcjonalne szczegóły monitorowania, wyjątki, statystyki bazy danych, współczynniki wersji/rekordów, walidację zmodyfikowanych tabel oraz diff firebird.log przed/po.
Możesz również zapytać:
select * from srv_mon_perf_dynamic; select * from srv_mon_perf_total;
Wczesne zatrzymanie
Użyj 1stoptest.tmp (.bat / .sh) utworzonego w tmpdir przy każdym uruchomieniu. Dla uruchomień na wielu hostach możesz zamiast tego włączyć ExternalFileAccess w firebird.conf, ustawić use_external_to_stop w konfiguracji OLTP i zapisać znak w tym pliku zatrzymania (wyczyść go przed każdym nowym uruchomieniem).
Powtarzalne baseline'y
Ustaw wait_for_copy = 1, pozwól zakończyć inicjalizację, skopiuj bazę, a następnie przywróć tę kopię przed każdym porównawczym uruchomieniem, aby każdy pomiar zaczynał się z tego samego punktu.
Co modeluje obciążenie
Scenariusz odwzorowuje dokumenty biznesowe w stylu serwisu samochodowego:
- Zamówienia klientów (lub wewnętrzne) na części
- Zamówienia łączone i wysyłane do dostawcy
- Faktura od dostawcy (pełna lub częściowa)
- Przyjęcie na magazyn; rezerwacja części zamówionych przez klientów
- Sprzedaż i odpisy magazynowe
- Anulowania możliwe na wielu etapach
- Częściowe/pełne płatności i anulowania wpływające na salda
- Pierwsza sesja generuje raporty wydajności, wyjątków, statystyk i walidacji