Mateusz Lorenc

Mateusz Lorenc Network Engineer,
Państwowa Wyższa
Szkoła Zawodowa im.
St...

Temat: MySQL, wydajność, badania, element pracy magisterskiej

Witam

Jako że nie jestem bazodanowcem a jest to element mojej pracy magisterskiej potrzebuję kilku rad bardziej doświadczonych kolegów. A mianowicie przeprowadzam testy na bazie, której tabela liczy np 2,5 mln. rekordów, może takich tabel być kilka i wykonują na nich jakieś zapytania od mniej złożonych do bardziej i porównuje czasy. Nie chcę używać narzędzi gotowych do Benchmarku takich jak sysbench bo po pierwsze bazy są pod nie zoptymalizowane a po drugie to są w końcu gotowe narzędzia. Jak najlepiej przedstawić takie wyniki? jak przeprowadzać najlepiej testy ? pod jakim kontem? Moim głównym celem pracy to porównanie wydajności bazy danych MySQL pod kontem różnych hyperwizorów takich jak cirtix, vmware, kvm, hyper-v. System na którym będę stawiał bazę to np CentOS ale zastanowię się także nad Windowsem.

konto usunięte

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.

Temat: MySQL, wydajność, badania, element pracy magisterskiej

Mateusz L.:
Jako że nie jestem bazodanowcem [...] Moim głównym celem pracy to porównanie wydajności bazy danych MySQL

Dlaczego bierzesz temat porównania wydajności bazy skoro jak piszesz nie znasz się na tym ?
Chyba, że czegoś nie zrozumiałem to sory :)

To nie jest takie proste jakby się mogło wydawać - Szymon trochę naświetlił problem.
Bez dogłębnej analizy silnika mysql nie wyciągniesz wniosków przydatnych do pracy mgr.Ten post został edytowany przez Autora dnia 17.08.14 o godzinie 18:48

konto usunięte

Temat: MySQL, wydajność, badania, element pracy magisterskiej

Mateusz L.:
Witam

Jako że nie jestem bazodanowcem a jest to element mojej pracy magisterskiej potrzebuję kilku rad bardziej doświadczonych kolegów.

Bycie magistrem nie polega na posiadaniu "kolegów". Przynajmniej w teorii.

konto usunięte

Temat: MySQL, wydajność, badania, element pracy magisterskiej

Warto sprawdzić czy licencja pozwala na tego typu badania. Niektórzy dostawcy wprost zabraniają porównywania swojego produktu do innych lub tworzenia testów bez pozwolenia.

pozdrawiam
Mateusz Lorenc

Mateusz Lorenc Network Engineer,
Państwowa Wyższa
Szkoła Zawodowa im.
St...

Temat: MySQL, wydajność, badania, element pracy magisterskiej

Witam ponownie i dziękuję za wyczerpujące odpowiedzi :p Praca magisterska zbliża się wielkimi krokami więc trzeba się wziąć do roboty a czasu nie wiele.

Utknąłem przy takim problemie:

Przy importowaniu do tabeli rekordów z plików csv, tabela osiąga około 2 mln. rekordów i koniec nie da się zaimportować więcej ani do tej tabeli ani do innej. Rekordy z plików csv są importowane rekurencyjnie za pomocą skryptu php. Problemem raczej nie jest miejsce bo główna partycja / ma 53 GB a zajęte miejsce tylko 10GB ale próbowałem przenieść katalog /var/lib/mysql do np. /home/mysql a w /var/lib zostawiłem dowiązanie symboliczne z oryginalnymi prawami no ale znowu wywala błąd że nie można się połączyć z gniazdem?

System: CentOS 7 zainstalowany na Hyper-v 2012 a zastosowana baza to MariaDB.

Wszelkie pomysły będą dla mnie na pewno pomocne :)
Przemysław Mierkowski

Przemysław Mierkowski Software Developer

Temat: MySQL, wydajność, badania, element pracy magisterskiej

Sprawdź może na początku maksymalny czas wykonywania PHP i limit pamięci dla PHP.
Może przekraczasz któreś z tych wartości i skrypt się wywala.

Spróbuj jeszcze pominąć PHP w ładowaniu danych i zadołować je bezpośrednio do MySql.
Przykładowe polecenie:
LOAD DATA INFILE 'plik.csv' INTO TABLE `nazwa_tabeli` FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n' (pole_1, pole_2, pole_3, ...);

Więcej tutaj: http://dev.mysql.com/doc/refman/5.1/en/load-data.html

konto usunięte

Temat: MySQL, wydajność, badania, element pracy magisterskiej

Mateusz L.:
Przy importowaniu do tabeli rekordów z plików csv, tabela osiąga około 2 mln. rekordów i koniec nie da się zaimportować więcej ani do tej tabeli ani do innej. Rekordy z plików csv są importowane rekurencyjnie za pomocą skryptu php. .

importowanie rekurencyjne w przypadku pliku csv jest raczej nie możliwe

a teraz proste pytanie ten skrypt odpalasz z CLI czy przeglądarki?



Wyślij zaproszenie do