2009-02-23 11 views
15

Jakie są najlepsze praktyki optymalizacji instalacji MySQL w celu uzyskania najlepszej wydajności przy obsłudze nieco większych tabel (> 50k rekordów o łącznej wartości około 100 MB na stół)? Aktualnie zajmujemy się przepisywaniem DelphiFeeds.com (strony z wiadomościami dla społeczności programistów Delphi) i zauważyliśmy, że proste instrukcje aktualizacji mogą zająć do 50 ms. Wydaje się, że to dużo. Czy są jakieś zalecane ustawienia konfiguracji, które powinniśmy włączyć/ustawić, które są zazwyczaj wyłączone w standardowej instalacji MySQL (np. Aby wykorzystać więcej pamięci RAM do buforowania zapytań i danych itd.)?Najlepsze praktyki optymalizacji baz danych MySQL

Jaki wpływ ma na wydajność wybór silników do przechowywania danych? Planujemy iść z InnoDB, ale jeśli MyISAM jest zalecany ze względu na wydajność, możemy użyć MyISAM.

+0

Jednym wielkim powodem do działania z silnikiem INNODB - jest obsługa transakcji. MyIsam nie obsługuje tego. Jeśli zależy Ci na integralności danych (tak jak powinno :)) - po prostu nie ma innej drogi.nie ma sposobu, aby niezawodnie wycofać sekwencję sql, jeśli nie używasz transakcji i coś złego stało się jak awaria zasilania. – Stann

Odpowiedz

16

„Najlepsze praktyki” to:

  1. wydajność Measure, izolowanie odnośnego podsystemu, jak to tylko możliwe.
  2. Zidentyfikować podstawową przyczynę wąskiego gardła. Czy jesteś związany z I/O? CPU jest związany? Pamięć jest związana? Czekam na zamki?
  3. Wprowadź zmiany, aby złagodzić pierwotną przyczynę, którą odkryłeś.
  4. Zmierz ponownie, aby zademonstrować, że naprawiono wąskie gardło i o wartości.
  5. Przejdź do kroku 2 i powtórz, jeśli to konieczne, aż system działa wystarczająco szybko.

Subskrybuj kanał RSS pod numerem http://www.mysqlperformanceblog.com i zapoznaj się z jego artykułami historycznymi. To bardzo przydatne źródło mądrości związanej z wydajnością. Na przykład zapytałeś o InnoDB vs. MyISAM. Ich wniosek: InnoDB ma średnio o 30% wyższą wydajność niż MyISAM. Chociaż istnieje również kilka scenariuszy użycia, w których MyISAM osiąga lepsze wyniki niż InnoDB.

autorzy tego bloga są również współautorami "High Performance MySQL" książki wspomnianej przez @Andrew Barnett.


Re komentarz z @ ʞɔıu: Jak stwierdzić, czy jesteś I/O związany kontra CPU związany versus pamięci związany jest zależne od platformy. System operacyjny może oferować takie narzędzia, jak ps, iostat, vmstat lub top. Lub może być konieczne uzyskanie narzędzia innej firmy, jeśli system operacyjny go nie obsługuje.

Zasadniczo, niezależnie od tego, który zasób jest ustalony przy 100% wykorzystania/nasycenia, prawdopodobnie będzie to wąskie gardło. Jeśli obciążenie procesora jest małe, ale obciążenie we/wy jest maksymalne dla sprzętu, oznacza to, że jest on powiązany we/wy.

To tylko jeden punkt danych. Środek zaradczy może również zależeć od innych czynników. Na przykład złożona kwerenda SQL może wykonywać polecenie filesort, co powoduje, że operacje we/wy są zajęte. Czy powinieneś wrzucić więcej/szybszy sprzęt, czy przeprojektować zapytanie, aby uniknąć plików?

Podsumowaniem jest zbyt wiele czynników w poście StackOverflow, a fakt, że istnieje wiele książek na ten temat, obsługuje to.Prowadzenie sprawnej pracy baz danych i optymalne wykorzystanie zasobów to praca w pełnym wymiarze godzin, wymagająca specjalistycznych umiejętności i stałego studiowania.


Jeff Atwood po prostu napisał piękny wpis na blogu o znalezienie wąskich gardeł w systemie:

+0

Jak określić, czy masz do czynienia z IO vs. CPU i pamięcią? –

7

Kupuj "High Performance MySQL" od O'Reilly. To prawie 700 stron na ten temat, więc wątpię, że znajdziesz zwięzłą odpowiedź na SO.

5

Trudno broadbrush rzeczy, ale widok z umiarkowanie wysokim poziomie jest możliwe .

  • Należy oszacować współczynniki odczytu: zapisu. W przypadku tabel o stosunkach mniejszych niż około 5: 1 prawdopodobnie skorzystasz z InnoDB, ponieważ wstawki nie będą blokować wybranych. Ale jeśli nie korzystasz z transakcji, powinieneś zmienić innodb_flush_log_at_trx_commit na 1, aby odzyskać wydajność za pośrednictwem MyISAM.
  • Sprawdź parametry pamięci. Domyślne ustawienia MySQL są bardzo konserwatywne, a niektóre limity pamięci mogą być zwiększone o 10 lub więcej razy nawet na zwykłym sprzęcie. To przyniesie korzyści Twoim WYBOROM, zamiast WSTAWIĆ.
  • MySQL może rejestrować takie rzeczy jak zapytania, które nie używają indeksów, a także zapytania, które trwają zbyt długo (definiowane przez użytkownika).
  • Pamięć podręczna zapytań może być przydatna, ale trzeba ją przyswoić (tj. Sprawdzić, ile jest używana). Kaktusy mogą to zrobić; tak jak Munin.
  • projektowania aplikacji jest również ważne:
    • Lekko buforowania często naciągane, ale niewielkie zbiory danych będą miały duże znaczenie (tzn cache żywotność przez kilka sekund).
    • Nie pobieraj ponownie danych, które już masz pod ręką.
    • Przechowywanie wielostopniowe może pomóc przy dużej ilości wstawek w tabelach, które są również odczytywane. Podstawową ideą jest to, że możesz mieć tabelę dla wstawek ad-hoc (może być także przydatna) (INSERT DELAYED), ale proces wsadowy do przenoszenia aktualizacji w obrębie MySQL, skąd odczytywane są wszystkie odczyty. Istnieją odmiany tego.
  • nie należy zapominać, że perspektywa i kontekst są ważne, zbyt: co myślisz jest długi czas na UPDATE się zdarzyć w rzeczywistości może być dość banalne czy że „długa” zmiana zdarza się tylko raz dziennie.
4

Istnieje wiele dobrych praktyk, które zostały wcześniej omówione, więc nie ma powodu, aby je powtarzać. Aby uzyskać konkretną poradę dotyczącą tego, co należy zrobić, spróbuję uruchomić MySQL Tuner. Jest to skrypt perlowy, który możesz pobrać, a następnie uruchomić na serwerze bazy danych, dzięki czemu uzyskasz statystyki dotyczące wydajności Twojej bazy danych (np. Trafienia w pamięci podręcznej) oraz konkretne zalecenia dotyczące tego, jakie problemy lub parametry konfiguracyjne wymagają dostosowania poprawić wydajność.

Wszystkie te statystyki są dostępne w samym MySQL, ale okazuje się, że to narzędzie zapewnia im znacznie łatwiejszy do zrozumienia sposób. Chociaż ważne jest, aby zauważyć, że YMMV w odniesieniu do zaleceń, znalazłem je na ogół dość dokładne. Tylko upewnij się, że wykonałeś dobrą robotę, wykonując wcześniej bazę danych z realistycznym ruchem.