Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Najlepsze narzędzie do dostrajania wydajności MySQL?

Zła wiadomość:istnieją narzędzia GUI, które mogą w tym pomóc, ale jest to wykwalifikowana i szeroko zakrojona praca. Więc nie obejmują wszystkiego, prawdopodobnie będziesz musiał użyć instrukcji stuff/sql itp., aby pomóc. Tak naprawdę używałem tylko narzędzi wiersza poleceń. Podam krótki przegląd rzeczy, które znam / używałem:

Po pierwsze, potrzebujesz dobrego projektu bazy danych. Jeśli projekt jest zły, możesz zajść tylko tak daleko. Obejmuje to normalizację, a także stosowanie odpowiednich typów pól. Zostawię ten punkt tutaj, ponieważ myślę, że jest to trochę na bok, a nie to, czego szukasz.

Upewnij się, że pamięć podręczna zapytań MySQL jest skonfigurowana i działa i daj jej trochę więcej pamięci RAM, jeśli możesz, i upewnij się, że twoje ważne zapytania nie robią niczego, co uniemożliwia mysql ich buforowanie. Na przykład użycie funkcji NOW() w zapytaniach powoduje to - z oczywistych powodów - TERAZ zmienia się co sekundę! Zamiast tego możesz umieścić znacznik czasu w sql i użyć czasu z dokładnością do najbliższej minuty/godziny/dzień (największy okres, z jakim możesz uciec), aby umożliwić mysql uzyskanie korzyści z pamięci podręcznej.

Aby rozpocząć optymalizację:Umieszczenie „WYJAŚNIJ” przed zaznaczeniem to sposób, aby zobaczyć, jak zapytanie jest wykonywane i jak je ulepszyć. Naucz się interpretować wyniki:http://dev.mysql .com/doc/refman/5.0/en/using-explain.html Często będziesz mógł dodawać nowe indeksy/dodawać kolumny do istniejących, aby poprawić sytuację. Ale spotkasz się również z sytuacjami, w których zapytania muszą zostać zrestrukturyzowane.

Rozpoczęcie poprawiania wydajności z MySQL (zakładając, że nie wiesz jeszcze, na czym polega zapytanie) jest sprawdzenie wolnego dziennika zapytań - loguje on do pliku wszystkie zapytania, które trwają dłużej niż x sekund.

Przegląd, w tym konfiguracja, jeśli jeszcze tego nie rejestruje, znajduje się tutaj:http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html - Odkryłem również, że ustawienie long_query_time na 0 na dzień lub więcej, aby wszystkie zapytania były tutaj rejestrowane z zajętym czasem, jest użytecznym sposobem na zorientowanie się, gdzie dokładnie idzie wydajność. Ale nie poszedłbym tam od razu! I nie zostawiaj go włączonej, dzienniki mogą stać się ogromne.

Po kilku dniach logowania znalazłem mysqlsla (powolny analizator logów mysql):http://hackmysql.com/mysqlsla to dobre narzędzie.

Może zrobić coś więcej niż tylko powolną analizę logów zapytań — przeczytaj instrukcję. Ale aby wyjaśnić, co to robi w przypadku wolnych dzienników:wolny dziennik zapytań może zawierać dużo danych, więc może być trudno określić, które zapytania są ogólnie najdroższe — np.:uwzględnij, ile razy są uruchamiane, a kiedy dwa zapytania są w rzeczywistości takie same z innym identyfikatorem w klauzuli where.

MySQL sla zrobi to wszystko za Ciebie. Przechodzi przez dziennik i może grupować zapytania, które są takie same/mają różne wartości w klauzulach WHERE. Następnie przedstawia (domyślnie) 10 najpopularniejszych zapytań pod względem całkowitego czasu wykonania - co często ma pewne niespodzianki, ale zwykle jest najbardziej produktywnym punktem wyjścia - weź najdroższe zapytanie i użyj na nim EXPLAIN i zobacz, czy możesz poprawić to.

Niektóre zapytania zajmują dużo czasu i nie można ich łatwo poprawić. W takim przypadku, czy możesz uzyskać dane w inny sposób lub przynajmniej zbuforować je? Może się nawet okazać, że wymagana jest zmiana schematu bazy danych. Podobnie, niektóre zapytania mogą znajdować się na górze wyniku mysqlsla, ponieważ często je uruchamiasz (szczególnie prawda, jeśli long_query_time jest ustawione na 0), nawet jeśli działają dość szybko. Może czas na dodanie pamięci podręcznej do Twojej aplikacji?

http://www.maatkit.org/ również wygląda obiecująco — nigdy go nie używałem, ale narzędzie mk-query-profiler powinno być przydatne do dalszego zbadania, dlaczego zapytania są wolne.

Zupełnie osobna rzecz, na którą należy zwrócić uwagę:strona "status" w PHPMYADMIN (lub możesz uruchomić wszystkie zapytania, aby wygenerować te informacje ....) - podświetla na czerwono rzeczy, które mogą być złe, i może ci pomóc zobacz, jakie korzyści możesz uzyskać dzięki przydzielaniu zasobów systemowych. Nie wiem za bardzo na ten temat - moje podejście zawsze było takie, że jeśli coś jest czerwone i źle wygląda, to poczytać o tym i zdecydować, czy jest to ważne i czy powinienem coś zrobić (zazwyczaj oznacza to przydzielenie większej ilości zasobów do MySQL zmieniając konfigurację).

Ostatnio odkryłem, że uruchomienie SHOW PROCESSLIST może być przydatne również na serwerze, który cierpi. Chociaż dostarcza tylko informacji na żywo (no, jest to migawka na żywo), może pomóc w zorientowaniu się, co dzieje się w danym momencie, zwłaszcza jeśli odświeżysz kilka razy i zaobserwujesz zmiany. Niedawno zauważyłem serwer używający każdego dostępnego połączenia mysql do uruchomienia identycznego zapytania przy użyciu tej metody. Jasne, byłoby to w dzienniku powolnych zapytań, ale jest to naprawdę szybki i oczywisty sposób, aby zobaczyć, co się dzieje.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwertuj skrypt MySQL na H2

  2. Operator logiczny AND w mySql REGEXP?

  3. Unikalna identyfikacja znaczników ulotek

  4. SQL Zastąp wiele zmiennych z innej tabeli w wyniku zapytania

  5. Dlaczego MySQL nie używa indeksu do lepszego porównania?