Ta strona została przetłumaczona maszynowo. Przeczytaj oryginał angielski. English

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.5Windowsoltp25_config.win.default
2.5Linuxoltp25_config.nix.default
3.0Windowsoltp30_config.win.default
3.0Linuxoltp30_config.nix.default
4.0Windowsoltp40_config.win.default
4.0Linuxoltp40_config.nix.default
# Windows
copy .\oltp30_config.win.default .\oltp30_config.win

Linux

cp ./oltp30_config.nix.default ./oltp30_config.nix

3. Ważne ustawienia

Edytuj skopiowaną konfigurację. Zwróć szczególną uwagę na:

  • fbc - ścieżka do isql na maszynie uruchamiającej sesje
  • clu - opcjonalna niestandardowa nazwa pliku binarnego ISQL (np. isql-fb w 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_max na 0, aby wyłączyć pauzy)
  • sleep_ddl - opcjonalna funkcja UDF do pauz (preferowana zamiast powłoki sleep / cscript); pliki binarne w util/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:

  • DefaultDbCachePages
  • LockHashSlots
  • LockMemSize
  • FileSystemCacheThreshold - 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, 30 lub 40 dla 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ów
  • benchmark - 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:

  1. Zamówienia klientów (lub wewnętrzne) na części
  2. Zamówienia łączone i wysyłane do dostawcy
  3. Faktura od dostawcy (pełna lub częściowa)
  4. Przyjęcie na magazyn; rezerwacja części zamówionych przez klientów
  5. Sprzedaż i odpisy magazynowe
  6. Anulowania możliwe na wielu etapach
  7. Częściowe/pełne płatności i anulowania wpływające na salda
  8. Pierwsza sesja generuje raporty wydajności, wyjątków, statystyk i walidacji