Skocz do zawartości
gutek

Pomoc przy wyborze odpowiedniego rozwiązania

Polecane posty

W dużym skrócie:

  • Baza danych około 1 mln rekordów, waga 0,5 gb
  • Serwer obsługuje wszystkie usługi (www, mysql): Xeon E3-1230 v2, 4 gb ram
  • dostęp do bazy (tylko odczyt) przez aplikacje www
  • aktualizacja zawartości bazy z poziomu php cli w trybie ciągłym tzn skrypt się kończy i zaczna kolejny raz itd

W czym problem:

W godzinach szczytu gdy dostęp do systemu ma więcej osób zwiększa się czas dostępu do aplikacji - nie wyrabia mysql. Jeżeli chodzi o wykorzystanie zasobów to nie ma problemu bo ram około 20-30%, procesor nie przekracza w maksymalnym momencie 50%. Nie wiem tylko co zmienić żeby zwiększyć wydajność mysql, aktualizacja musi być wykoywana na bieżąco i to ona może być powodem blokady tabel itp.

 

Aplikacja jest raczej dobrze zooptymalizowana.

 

Co możecie zaproponować?

Zmiana parametrów mysql? Replikacja i odczyt tylko ze slave? Zmiana serwera na mocniejszy? Może zmniejszenie parametrów aktualizacji np. pobieranie mniejszej ilości wierszy?

 

Zastanawiam się nad zmianą serwera na 2 x Xeon E5-2620, 32 gb, dyski sas.

 

Aplikacja się rozwija, rekordów przybywa i problem będzie coraz większy.

 

Dzięki za podpowiedzi.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość patrys

Więcej ramu, zmienić dyski na SSD i poprawić konfiguracje MySQL, a dopiero myśleć o replikacjach.

Zawsze jeszcze zostaje użycie Memcached czy Redis...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czy zwiększenie ilości ramu coś pomoże skoro nie jest on wykorzystywany nawet w połowie.. Co w mysql poprawić?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Na początek tylko poprawić konfiguracje MySQL nic więcej. Wnioski czytając twój opis o wykorzystaniu zasobów. Dodatkowo przemyśl przejście na dyski SSD jak pierwsze proponowane rozwiązanie nie spowoduje znaczącej poprawy. Konfiguracja to podstawa i to jest klucz, może nie do sukcesu ale zdecydowanie do rozgraniczenia dwóch elementów: oprogramowanie = serwer (konfiguracja sprzętowa).

 

jakie masz te dyski SAS? Model?

Edytowano przez SiXwishlist (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Spytam z ciekawości na który parametr w konfiguracji mysql zwrócić uwagę? Zmieniałem już kilka i nie wiele to zmienia, być może błądze..

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość patrys

@gutek: to nie jest takie proste, że poprawisz jeden parametr który ktoś Ci napisze na forum.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Napisałem który parametr mając na myśli parametry .. w weekend przeprowadze kolejne próby, pozmieniam i zobaczymy co będzie..

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mysqltuner to podstawa. Poza tym skoro ram jest używany w 50% i jesteś pewny, że winowajcą jest serwer mysql to coś robisz źle. Albo źle oszacowałeś winowajcę, albo nie ruszałeś konfiguracji mysqla od czasu instalacji.

Edytowano przez Archi (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

W dużym skrócie:

  • Baza danych około 1 mln rekordów, waga 0,5 gb
  • Serwer obsługuje wszystkie usługi (www, mysql): Xeon E3-1230 v2, 4 gb ram
  • dostęp do bazy (tylko odczyt) przez aplikacje www
  • aktualizacja zawartości bazy z poziomu php cli w trybie ciągłym tzn skrypt się kończy i zaczna kolejny raz itd

W czym problem:

W godzinach szczytu gdy dostęp do systemu ma więcej osób zwiększa się czas dostępu do aplikacji - nie wyrabia mysql. Jeżeli chodzi o wykorzystanie zasobów to nie ma problemu bo ram około 20-30%, procesor nie przekracza w maksymalnym momencie 50%. Nie wiem tylko co zmienić żeby zwiększyć wydajność mysql, aktualizacja musi być wykoywana na bieżąco i to ona może być powodem blokady tabel itp.

 

Aplikacja jest raczej dobrze zooptymalizowana.

 

Co możecie zaproponować?

Zmiana parametrów mysql? Replikacja i odczyt tylko ze slave? Zmiana serwera na mocniejszy? Może zmniejszenie parametrów aktualizacji np. pobieranie mniejszej ilości wierszy?

 

Zastanawiam się nad zmianą serwera na 2 x Xeon E5-2620, 32 gb, dyski sas.

 

Aplikacja się rozwija, rekordów przybywa i problem będzie coraz większy.

 

Dzięki za podpowiedzi.

 

masz jakiekolwiek statystyki z dzialania bazy ? z systemu w postaci IO/VM ?

jesli cpu nie przekracza 50% szukalbym nekow w podsystemach

 

sprawdz ile tabel ci sie tworzy na dyskach, moze przenies tmp na jakis ramdysk skromny

opcji jest wiele ale nie podales zadnych danych wiec ciezko pomoc,

moze pokaz chociaz staty io/vm z okresu w ktorym ci sie grzeje i proclist

z taka mala baze cachebuffery index buffer itp nie musi byc za duzy, z tego co piszesz moze to byc problem z IO ale niekoniecznie odrazu musisz zmieniac sprzet... staty/logi i info_schema to podstawa

sprzet mozesz zmienic zawsze

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Odświeżam wątek

 

Zmieniłem maszynę na E5-2650, 32 gb ram, 2 x 240 ssd (raid1)

 

baza danych składa się z około 50 tabel (tabele o największej pojemności zawierają około 1 mln rekordów i są jako myisam), cała baza zajmuje około 1,5 gb

 

Wykonywane są regularne aktualizacje zawartości tabel tzn cały dzień działa aplikacja która dokonuje updateów i insertów tych tabel, może być próba wykonania wielu aktualizacji w tym samym czasie przez różne wątki aplikacji w jednej tabeli

 

Z optymalizacją to chyba przesadziłem, oto ona:

key_buffer              = 4096M
key_buffer_size         = 16384M
tmp_table_size          = 8192M
max_allowed_packet      = 256M
thread_stack            = 1024K
thread_cache_size       = 256
query_cache_limit       = 256M
query_cache_size        = 512M
max_connections        = 500
sort_buffer_size        = 2048M
table_open_cache        = 2048M
read_buffer_size        = 2048M
innodb_buffer_pool_size = 8196M

Wyczytałem dzisiaj, że nie ma potrzeby zwiększania wielu parametrów aż tak bardzo jak u mnie i teraz moje pytanie co zmienić aby poprawić wydajność

 

Czy postawienie 4 x ssd w raid 10 coś pomoże?

 

Może warto zmienić silnik dla tabel które mają wiele updateów na innodb ?

 

Bardzo dziękuję za ewentualne podpowiedzi

Edytowano przez gutek (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zmień na innodb. W myisam masz robiony lock tabeli, wtedy reszta czeka.

 

key_buffer = 4096M
key_buffer_size = 16384M

 

16gb? :) Ile zajmują Twoje indexy? Te dwie wartości, to to samo.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zmień na innodb. W myisam masz robiony lock tabeli, wtedy reszta czeka.

 

key_buffer = 4096M

key_buffer_size = 16384M

 

16gb? :) Ile zajmują Twoje indexy? Te dwie wartości, to to samo.

 

Wprowadziłem zmiany. Indeksy zajmują dużo mniej :)

 

Czy ma sens kopiowanie tabeli np. dane1 > dane2 gdzie dane1 jest cały czas aktualizowana a dane2 służy tylko do odczytu przez inną część aplikacji i wtedy dane2 myisam ? Tak mam teraz bo bardzo blokowało dostęp.

 

A pozostałe parametry z tych ustawionych są okey?

Edytowano przez gutek (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

dzisiaj się zorientowałem że w tabeli z engine innodb nie działają inserty, przeszukałem internet zmieniając wiele wartości w celu sprawdzenia i dalej nic.. według mnie nie działa autoincrement mimo że jest zaznaczone bo jest bład powielenia wartości dla PRIMARY key..

 

zmieniłem innodb_autoinc_lock_mode z 1 na 0, czy tak będzie lepiej mimo, że insert dalej nie działa ?

Edytowano przez gutek (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Chyba znalazłem rozwiązanie, bo inserty już działają.

 

Zmieniłem typ wiersza na BIGINT i działa, czy według Was tak ma być czy jest inna przyczyna ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ile masz rekordów w tej tabeli...? Jeśli pole AUTOINCREMENT było typu INT i doleciało do limitu dla tego typu pola (tutaj pewnie 2147483647 rekordów) to siłą rzeczy więcej już nie dodasz bez zmiany typu pola.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ja trochę od tematu - czy koniecznie potrzebujesz tego silnika i obudowy bazy? Używasz transakcji? Może NoSQL jakiś lub np. zamiast MySQL, Percona?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×