Database benchmark
Table of contents generated with markdown-toc
Opis
Do aktywnego monitoringu potrzebujemy benchmarków. Jednym z nich ma być serwer bazy danych. Oczekiwania wobec benchmarka:
- Konteneryzacja - nie musi być "oficjalna", może być utrzymywana przez nas. W przypadku nie utrzymywanych projektów z kontenerami preferowane przetrzymywanie lokalne.
- Uruchamianie benchmarka musi być ograniczalne zasobowo (ustalenie limitów prockowych i pamięciowych). Ograniczenie nie musi być wspierane przez benchmark, może być realizowane przez dockera/system.
- Benchmark ma zwracać conajmniej jedną metrykę liczbową, która będzie mogła być porównywana pomiędzy kolejnymi uruchomieniami.
Research
Materiały
- https://itnext.io/benchmark-databases-in-docker-mysql-postgresql-sql-server-7b129368eed7
- https://pgtune.leopard.in.ua/#/
- https://github.com/stcarrez/sql-benchmark
- https://www.enterprisedb.com/how-to-benchmark-postgresql-using-hammerdb-open-source-tool
HammerDB
Źródło
https://github.com/TPC-Council/HammerDB
Kontener
https://github.com/webysther/hammerdb-docker
Przykład
Testy można w łatwy sposób oskryptować, uzywajac tcla, poniżej przykłady:
- https://www.enterprisedb.com/how-to-benchmark-postgresql-using-hammerdb-open-source-tool
- https://newbiedba.wordpress.com/2020/08/19/configuring-hammerdb-for-database-performance-benchmark-via-cli/
Udało mi się przeprowadzić dla PostgreSQL, konfiguracja samego benchmarku wydaje się być odrobinę złożona i trwa on stosunkowo długo (choć może to być kwestia konfiguracji). Zaletą tego narzędzia jest to, że na koniec zwraca dwie liczby (TPM i NOPM), które powinno dać się łatwo wyłuskać.
Przydatne metryki
- TPM
- NOPM
Sysbench
Źródło
https://github.com/akopytov/sysbench
Kontener
https://github.com/ashraf-s9s/sysbench-docker
Przykład
W kontenerze znajdują się gotowe skrypty testowe w Lua. Przetestowałem OLTP na MySQL (tutaj z kolei więcej problemów było z konfiguracją samej bazy). Można zdefiniować wprost czas trwania testu, ilość wątków, częstotliwość logów itd. Na koniec zwraca podsumowanie wyników, zawierające takie parametry, jak: queries performed, transactions, queries, latency, threads fairness.
Przydatne metryki
- queries performed
- transactions
- queries
- latency
- threads fairness
Propozycja implementacji
inprogress: nadal waham się które narzędzie wybrać