2011-09-28 20 views
7

Nadal borykam się z wydajnością mojej bazy danych MySQL za pomocą silnika InnoDB. Szczególnie wydajność wstawiania danych, pomniejsza wydajność uruchomionych zapytań.Porady dotyczące optymalizacji wydajności MySQL InnoDB (wstawianie)?

Przeszukałem informacje, jak to zrobić i tak dalej, ale większość informacji była dla mnie ważna. Czy mogę znaleźć gdzieś w sieci podstawowe informacje dla "początkujących", punkt wyjścia do optymalizacji wydajności? Pierwsze, najważniejsze kroki do optymalizacji InnoDB wyjaśniono w mniej skomplikowany sposób.

Używam platformy Windows

+0

http://www.mysqlperformanceblog.com/2011/03/18/video-the-innodb-storage-engine-for-mysql/ –

+0

Lol @ "głęboki" ........... – Pacerier

Odpowiedz

15

kiedyś zarządzać kilka bardzo dużych baz danych MySQL (jak, 1TB +). Były to ogromne, bezlitosne bestie z niekończącym się apetytem na problemy żołądkowe.

Przeczytałem wszystko, co mogłem znaleźć na MySQL Performance Tuning i innodb. Oto podsumowanie tego, co mi pomogło:

  1. Książka High Performance MySQL jest dobra, ale tylko do tej pory.
  2. Blog MySQL Performance Blog (this link is to their posts tagged 'innodb') był najbardziej przydatnym ogólnym zasobem znalezionym w sieci. Wchodzą w szczegóły dotyczące wielu problemów z tuningiem innodb. Czasami robi się "ranty", ale ogólnie jest świetnie. Tutaj jest inny link na InnoDB Performance Optimization Basics, który jest dobry.
  3. Ostatnią rzeczą, której nauczyłem się, było po prostu przeczytanie samych dokumentów MySQL. Czytałem, jak działa każdy ostatni parametr, zmieniłem je na moim serwerze, a następnie zrobiłem kilka podstawowych profilów. Po chwili zastanawiasz się, co działa, uruchamiając duże zapytania i widząc, co się dzieje. Tu jest dobre miejsce, aby rozpocząć: InnoDB Performance Tuning and Troubleshooting

W końcu to tylko eksperymenty i pracy poprzez rzeczy aż zdobędziesz wystarczającą wiedzę, aby wiedzieć, co działa.

+0

Dziękujemy za szczegółową odpowiedź. Nie będę bardzo intensywnie pracował z MySQL i niestety nie mam zbyt wiele czasu na przestudiowanie tego wszystkiego, ale mam kilka dobrych punktów wyjścia teraz – waanders

+1

@Kevin, Czytasz jak działa każde ustawienie? Jak to możliwe, gdy jest tyle [622 zmiennych serwera] (https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html)? Lista zawiera tylko niektóre zmienne, które są [specyficzne dla InnoDB] (http://stackoverflow.com/a/29539807/632951). – Pacerier

+0

Przeczytałem wszystkie dokumenty dotyczące wersji, z której korzystałem. To było chwilę temu, ale tak, było ich dużo. Zbudowaliśmy to w ciągu kilku lat. –

-1

nie używać „net, użyłem książki. :)

Książka, której nauczyłem się MySQL to "Rozpoczęcie MySQL" od Wrox Press, Roberta Sheldona i Geoffa Moesa. Rozdział 15 zawiera podstawy optymalizacji. Ta książka bardzo mi się spodobała i uważam, że będzie to dobra lektura i była moim numerem odniesienia. Ale nie jest to specyficzny silnik pamięci masowej.

Mam kolejną książkę, Pro MySQL z apress, która idzie o wiele więcej szczegółów na temat konkretnych silników do przechowywania, ale jest również trudniejsze do odczytania. Wciąż dobre referencje.

+0

Dzięki, może muszę kupić tę książkę. Ale w przypadku większości problemów z programowaniem mogę używać sieci, powinny gdzieś być jakieś informacje ... – waanders

4

Dla początkujących: innodb_flush_log_at_trx_commit = 0, jeśli możesz pozwolić sobie na utratę do 1 sekundy pracy, jeśli serwer się zawiesi. Jest to stosunek wydajności do niezawodności, ale znacznie poprawi twoją wydajność zapisu. Jeśli możesz pozwolić sobie na pamięć podręczną zapisu z podtrzymaniem bateryjnym, użyj jej.

W szczególności w systemie Windows i wydajności zapisu, MariaDB 5.3 może być lepszym pomysłem niż baza danych MySQL firmy Oracle, ponieważ MariaDB jest w stanie lepiej wykorzystać asynchroniczne IO w systemie Windows. Napisałem o tym notatkę jakiś czas temu: here, na standardowym benchmarku syntetycznym działa do 500% lepiej niż zapas MySQL 5.5 (patrz zdjęcia na końcu notatki).

Jednak pierwszą i najważniejszą rzeczą, która zabija wydajność, jest spłukiwanie dysku.Jest to możliwe do rozwiązania, jeśli rozluźnisz wytrzymałość za pomocą parametru * innodb_flush_log_at_trx_commit *, z pamięcią podręczną zapisu z podtrzymaniem bateryjnym. Możesz również rozważyć użycie większych transakcji, które zmniejszają liczbę zrzutów dysku.

Powiązane problemy