Inspiracja , wiedza , realizacja
Jsystems

W przebudowie

Login



Java

Oracle

Linux

Android

PostgreSQL

Microsoft SQL Server

PgBench – testy wydajnościowe bazy danych

Data dodania: Jun 16, 2016
Data aktualizacji: Jun 16, 2016

Pgbench jest narzędziem typu benchmark który możemy wykorzystać do testowania wydajności baz danych PostgreSQL.


Przygotowanie środowiska


Narzędzie to na potrzeby testów wymaga utworzenia kilku tabel, na których następnie będzie wykonywał testy wydajnościowe mierząc wydajność operacji SELECT,UPDATE,DELETE,INSERT. Z tego powodu na potrzeby pgbench warto przygotować sobie osobną bazę danych.


create database pgbench;


Wielkość tabel tworzonych przez PgBench może być różna i zależy od wartości którą podamy przy inicjalizacji. Na potrzeby testów tworzone są tabele zawierające informacje o oddziałach fikcyjnego banku, inkasentach i rachunkach. Wielkość tabel określamy przy użyciu skali wprowadzanej przy użyciu przełącznika -s. Przy użyciu tego parametru podajemy skalę będącą ilością oddziałów. I tak – na każdy jeden oddział przypada 10 kasjerów i 100 000 rachunków. Oznacza to, że uruchomienie np. skali 20 spowoduje dodanie 20 oddziałów, 200 kasjerów i 2 000 000 rachunków. Wielkość bazy testowej silnie wpływa na wykorzystanie buforów i ilość operacji I/O podczas testów. Aby testy były względnie miarodajne, powinniśmy utworzyć bazę wielkości zbliżonej do naszej bazy produkcyjnej. Jeśli pgbench nie jest zainstalowany w Twojej bazie danych zainstaluj go:


yum install postgresql-contrib

yum install postgresql94-contrib


Przechodzimy teraz do inicjalizacji bazy testowej. Przejdź do katalogu z binariami PostgreSQL i uruchom instrukcję podobną do poniższej. Przełącznik -i oznacza inicjalizację, -s oznacza skalę – w tym przypadku stworzone zostanie 20 oddziałów. Na końcu podajemy bazę danych na której mają być przeprowadzane testy – tj. w której mają zostać utworzone tabele na potrzeby testów. Jeśli nie podamy skali, zostanie przyjęta domyślna wartość 1.


./pgbench -i -s 20 pgbench


Po uruchomieniu zostaniemy poproszeni o hasło do bazy (ściślej dla użytkownika postgres).




Po inicjalizacji możesz zajrzeć do wskazanej testowej bazy danych, aby sprawdzić czy tabele na pewno zostały utworzone.




Pierwszy test


Zaczniemy od prostego testu wydajności opartego tylko na operacjach odczytu – SELECT.


./pgbench -S -c 4 -t 20000 pgbench


Parametr -S oznacza testy tylko z użyciem operacji SELECT, parametr -c oznacza ilość klientów bazy danych poprzez które mają być przeprowadzane testy, parametr -t oznacza ilość transakcji do wykonania przez każdego klienta. W tym przypadku zostanie więc wykonane 80000 zapytań SELECT z użyciem 4 klientów.




Poza informacjami konfiguracyjnymi które sami wprowadziliśmy, na końcu zobaczymy najważniejszą dla nas średnią ilość transakcji którą udało się przeprowadzić w ciągu sekundy (tps – transaction per second).


Rodzaje testów i przełączniki


W poprzednim przykładzie uruchamiając testy podałem ilość transakcji do wykonania. Możemy również wykorzystać przełącznik -T aby zamiast ilości transakcji podać czas przez jaki mają być przeprowadzane testy. Wartość którą podajemy to ilość sekund. Zauważ że wielkość liter w przypadku przełączników PgBench ma znaczenie. Małe t oznacza ilość transakcji, duże T oznacza czas wyrażony w sekundach.


Czas wykonywania testów


./pgbench -S -c 4 -T 60 pgbench



Ilość wątków


W pierwszym przykładowym teście został zastosowany jedynie jeden wątek. Możemy zmusić go do zastosowania większej liczby wątków z użyciem przełącznika -j:


./pgbench -S -c 4 -T 60 -j 4 pgbench



Tryb debug


Jeśli ciekawi co tam się dzieje „w środku” możesz posłużyć się przełącznikiem -d który uruchomi tryb debug i pokaże zapytania wykonywane w ramach testów:


./pgbench -S -c 4 -t 10 -j 4 -d pgbench



Obserwacja postępów procesu testowania


Inny użyteczny przełącznik -P pokaże nam postęp przetwarzania testów co X sekund podane jako parametr tego przełącznika:


./pgbench -S -c 4 -T 10 -j 4 -P 1 pgbench



Testy na zdalnym hoście


Nic nie stoi na przeszkodzie byśmy przeprowadzali testy na zdalnym hoście. Można oczywiście zawsze podpiąć się przez SSH, jednak nie zawsze jest taka możliwość (np. gdy jest to serwer postawiony na Windows (fuu) ). Jak się nietrudno domyślić, baza przykładowa musi być też zainicjalizowana ;) Pamiętaj że taki test przeprowadzany zdalnie przez sieć będzie zdecydowanie wolniejszy niż gdybyś podłączył się poprzez SSH i wykonał testy lokalnie.



Uwagi


We wszystkich przykładach powyżej używałem testów trwających góra minutę. W realnym środowisku aby testy były bardziej miarodajne lepiej jest używać dłuższych czasów – np. 20-30 minut. Aby się o tym przekonać zrób kilkukrotnie testy trwające 10 sekund a następnie analogicznie 10 minut. Porównaj zróżnicowanie wyników w zależności od czasu trwania testów. Te prowadzone w krótszym czasie będą znacznie bardziej „rozstrzelone”.

Wszędzie powyżej używałem też przełącznika -S który sprawiał, że testy były oparte wyłącznie na instrukcjach SELECT. Jeśli go nie zastosujesz będą również używane UPDATE,INSERT i DELETE. Nastaw się jednak na to, że powstanie spora liczba zarchiwizowanych plików WAL jeśli Twój serwer działa w trybie archiwizacji ciągłej.