Temat: MySQL, wydajność, badania, element pracy magisterskiej
Nie rozumiem pytania. Jak przedstawić wyniki? Normalnie, tak jak wyniki wszelkich innych badań: opis i cel doświadczenia, opis przeprowadzonych testów, zagregowane wyniki i wnioski.
A tak odnośnie samej bazy danych.
Testy na bazie, która ma x wierszy nic nie mówią. Właśnie wygenerowałem sobie w Postgresie tabelę, która ma 2,5M wierszy. Zajmuje całe 67MB. To jest tak znikoma ilość danych, że to nic nie mówi. Poza tym zależnie od optymalizacji bazy, pewne zapytania mogą wcale tych danych nie ruszać, a wyniki zwracać.
Ogólnie problem optymalizacji bazy danych to problem znalezienia lokalnego minimum funkcji mającej, tak na oko, jakieś 200 zmiennych. Te zmienne to m.in.:
- struktura bazy
- rodzaj zapytań
- wszelkie zmienne konfiguracyjne bazy danych
- konfiguracja sprzętowa maszyn (wielkość ramu, rodzaj dysków/macierzy)
- rozproszenie przestrzenne baz danych (aka replikacja)
- konfiguracja systemu operacyjnego
- rodzaj systemu plików
- współbieżność zapytań oraz innych procesów jednocześnie ganiających w tle
- opóźnienie i prędkość sieci, po której idą zapytania i dane
- rodzaj klienta robiącego zapytania
- w przypadku mysqla dochodzi rodzaj tabeli (MyISAM, InnoDB)
Ogólnie rzeczy, na które należy zwrócić uwagę są proste, jak w każdym teście: początkowy stan maszyny, kwestia wypełnienia buforów dysków i systemu operacyjnego, powtarzalność testów. Inaczej będą się zachowywały zapytania, których dane są wczytane do pamięci, a inaczej te, w których dane dopiero trzeba z dysku odczytać.
Proponuję zobaczyć testy TPC, ot chociażby najprostszy TPC-B, można pewnie znaleźć jakąś implementację, albo też implementacja samemu będzie trywialna.
Ogólne rzeczy, które trzeba wziąć pod uwagę odnośnie testów bazy danych (pewnie tego jest więcej):
- zapytania po restarcie sprzętu/systemu/bazy są wolniejsze, niż te robione później, dlatego najlepiej odpalić kilka razy testy, a potem odpalić je zapisując czas
- testy należy powtórzyć wiele razy i obrobić wyniki statystycznie
- często zapytanie śmiga niezmiernie szybko, ale dane potem są przesyłane niezmiernie wolno przez sieć, bo jest ich tak dużo, trzeba to rozdzielić
- często zapytanie śmiga niezmiernie szybko, ale dane potem są pakowane do niezmiernie wielkiej liczby obiektów, których to utworzenie trwa bardzo długo
- statystyki muszą być aktualne, nie wiem jak MySQL zarządza aktualizacją statystyk, ale jeśli nie będzie miał aktualnych danych na temat danych, to zapytanie, które przez godzinę wykonywało się 10 minut, nagle może przyspieszyć do 10s i wszelkie informacje na temat czasu wykonania można sobie gdzieś wsadzić
- wiedz co testujesz, czy to jest czas wykonania zapytania, czy ściągnięcia danych, czy przerobienia ich w kliencie, czy cokolwiek innego
Ale skoro testować masz inne rzeczy, to proponuję coś prostego: napisz sobie jakieś testy, odpal jest ze sto razy zapisując wyniki, potem powtórz to samo z inną konfiguracją i porównaj wyniki. Za każdym razem miej dokładnie tę samą konfigurację bazy danych, tę samą wersję, ten sam system operacyjny w tej samej wersji.