Jak dostroić MySQL do dużego obciążenia InnoDB?

39

Zakładając produkcyjny system OLTP z głównie tabelami InnoDB

  • Jakie są typowe objawy źle skonfigurowanego / źle skonfigurowanego systemu?
  • Jakie parametry konfiguracyjne najczęściej zmieniasz w stosunku do ich wartości domyślnych?
  • Jak dostrzegasz potencjalne wąskie gardła, zanim pojawi się problem?
  • Jak rozpoznajesz i rozwiązujesz aktywne problemy?

statusDocenione zostaną wszelkie anegdoty wyszczególniające określone zmienne i diagnostykę.

Riedsio
źródło
2
To pytanie jest strasznie ogólne. Czy możesz podzielić to na 4 pytania? (A nawet twoje wypunktowane pytania są niewiarygodnie szerokie. Czy potrafisz je rozwiązać z konkretnymi problemami?)
Brian Ballsun-Stanton

Odpowiedzi:

16

Oto dobry artykuł na temat strojenia InnoDB od Jenny Chen Sun - dużo bloguje na temat MySQL, niektóre z nich są specyficzne dla Solaris (np. Za pomocą DTrace ), ale cały blog jest pełen ciekawych ciekawostek.

Gajusz
źródło
4
Kim jest Jenny Chen?
Pacerier
19

Co ciekawe, w MySQL 5.5 możesz teraz mieć wiele pul buforów innodb.

Parametry, na których ci zależy

Za około miesiąc jestem gotów zaimplementować 112 pul buforów innodb dla klienta. Dam ci znać, jak poszło.

AKTUALIZACJA 27.02.2011 21:57 EDT

Dowiedziałem się, że maksymalna wartość innodb_buffer_pool_instances to 64. Zdecydowałem się skonfigurować 144 GB, więc ustawiłem innodb_buffer_pool_instances na 18 i innodb_buffer_pool_size na 8. Aktualnie ładuję serwer z 450 GB

AKTUALIZACJA 28.04.2011 13:44 EDT

Wypróbowałem wiele pul buforów InnoDB. Zbyt wiele wątków blokowało i rywalizowało. Zmieniłem na pojedynczą pulę buforów o pojemności 162 GB + ustawienie read_io_threads i write_io_threads na 64 (maksymalna wartość). To działało o wiele lepiej.

AKTUALIZACJA 2012-07-03 17:27 EDT

Nauczyłem się czegoś niesamowitego o MySQL. Jeśli przydzielisz pojedynczą monolityczną pulę buforów InnoDB, która jest większa niż całkowita liczba zainstalowanych urządzeń podzielona przez liczbę fizycznych procesorów , zachęcisz system operacyjny do regularnej wymiany pamięci z powodu pełnej puli buforów InnoDB. Opcja MySQL 5.5 znana jako innodb_buffer_pool_instances może być używana do podziału puli buforów. Wczoraj odpowiednio zaimplementowałem to dla klienta, o którym wspomniałem w zeszłym roku. Nadal mam 162 GB na pulę buforów klienta. Ustawiłem opcję innodb_buffer_pool_instances na serwerze na 2, ponieważ każdy serwer DB jest podwójny hexacore. Myślałem o ustawieniu go na 12, ale potem kolega pokazał mi blog od Jeremy'ego Cole'a na MySQL i Swappiness. Po przeczytaniu wprowadzam go w życie natychmiast dla mojego klienta. Uruchomiłem to polecenie

numactl --hardware

Widziałem mapowanie 192 GB pamięci RAM serwera jako 96 GB na każdy rdzeń fizyczny. Dlatego ustawiłem innodb_buffer_pool_instances na 2. Rzeczy wyglądają teraz dobrze. Zaktualizuję moją odpowiedź, aby zobaczyć, jak wpływa to na zamianę pamięci dla kolejnych 2 miesięcy.

RolandoMySQLDBA
źródło
Cześć @RolandoMySQLDBA, z blogów Jeremy'ego Nie mogę znaleźć żadnego połączenia ani konkluzji, które ustawiłyby instancję innodb równą liczbie fizycznych procesorów, rozwiąże problem z zamianą. Czy wiele instancji innodb automatycznie równoważy węzły pamięci bez ustawiania numactl --interleave = all, opróżniania pamięci podręcznej buforów Linuksa lub zmuszania systemu operacyjnego do przydzielania puli buforów InnoDB?
Wen Ren
@Rolando, Nice 2x 100 GB ram. Który to klient?
Pacerier
Myślałem, że „instancje” zostały zaimplementowane w ten sposób: (numer bloku) MOD (liczba instancji) -> (w której instancji należy umieścić blok). To nie ma nic wspólnego z NUMA.
Rick James
4

Najpierw zwiększ domyślną wielkość puli buforów InnoDB w pliku my.cnf (domyślnie 8 MB)

Prawdopodobnie powinieneś ustawić to na 75% swojego rozmiaru pamięci RAM (ogólnie)

Matt Healy
źródło
-1

Jakie parametry konfiguracyjne najczęściej zmieniasz w stosunku do ich wartości domyślnych?

konfiguracja pamięci

sbczk
źródło
Czy możesz podać bardziej wyjaśniającą odpowiedź? Co z nimi zmieniasz? Dlaczego wprowadzasz te zmiany? Jakie są twoje spostrzeżenia po wspomnianych zmianach? Skąd wiesz, na co je zmienić?
jcolebrand
po wyjęciu z pudełka konfiguracja mysql jest przygotowana do szybkiej konfiguracji tabel myisam (ponieważ większość użytkowników korzysta z niej w ten sposób), poza tym, aby mieć dobrze zoptymalizowany serwer, powinieneś wybrać silnik „podstawowy” do użycia (innodb lub mysql), ponieważ jest to naprawdę dość trudno konfigurować bazę danych dla doskonałej wydajności silników stoiskowych, mysql ma osobne bufory dla silników myisam i innodb
sbczk