Mam witrynę Drupal i mam problemy z wydajnością. Znalazłem Jak przekonwertować bazę danych z MyISAM do InnoDB? wskazując, że wydajność może się poprawić przez przełączanie.
Jak mogę sprawdzić, czy moja baza danych MySQL to InnoDB lub MyISAM?
performance
database
chrisjlee
źródło
źródło
Odpowiedzi:
Możesz uruchomić niestandardowe zapytanie:
aby wyświetlić listę wszystkich tabel w bazie danych i wyszukiwarki, która jest używana dla każdej z nich.
Alternatywnie możesz zalogować się do bazy danych za pomocą phpMyAdmin i wybrać bazę danych ... silnik zobaczysz w
Type
kolumnie na liście tabel.Osobiście polecam Navicat dla MySQL , jest to bardzo przyjemny GUI MySQL i sprawia, że znalezienie takich rzeczy jest bardzo łatwe.
Źródło: http://www.electrictoolbox.com/mysql-table-storage-engine/
źródło
SHOW TABLE STATUS
. Aby uzyskać prostą liczbę tabel w każdym typie silnika, wystarczySELECT ENGINE,COUNT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY ENGINE
.Moim najlepszym doświadczeniem było decydowanie na podstawie stołu. InnoDB jest fajny, ponieważ może uniknąć blokowania tabeli (żaden inny proces nie może odczytać z tabeli, gdy jeden proces pisze), ale działa strasznie z COUNT (), który jest często używany do zapytań pager.
(Edycja: patrz komentarz Clives poniżej)
Wpływają również na konfigurację MySQL, w zależności od używanego DB. Jeśli masz dostęp do serwera, mysqltuner powinien być pierwszym krokiem do sprawdzenia konfiguracji:
https://github.com/rackerhacker/MySQLTuner-perl#readme
źródło
COUNT
zapytań, zgodnie z tym artykułem przez byłego kierownika grupy High Performance dla MySQL choć tylko naprawdę wpływa kwerendę zawierającąCOUNT(*)
bez pomocąWHERE
klauzuli.SELECT COUNT(*) FROM table
może natychmiast zwrócić tę wartość. InnoDB nie, więc musi przeskanować cały indeks klucza podstawowego. To powiedziawszy, podczas gdy Drupal robi dużoSELECT COUNT(*)
, mogę myśleć tylko o jednym miejscu w całym kodzie, który robi to bezWHERE
klauzuli. Dlatego nie używaj MyISAM z troski o ten konkretny przypadek. InnoDB z przyzwoitą pulą buforów będzie szybszy dla wszystkich zapytań w świecie rzeczywistym.Próba szybszego uzyskania strony internetowej jest jak ślepa zmiana samochodu i mam nadzieję, że dostaniesz szybszy następnym razem.
Najpierw spróbuj nisko wiszących owoców, jeśli to nie pomoże, spróbuj znaleźć prawdziwe wąskie gardło.
Często jest to tylko powolne zapytanie DB, które wymaga indeksu lub modułu wykonującego czynności w zwolnionym tempie.
Odkryłem również duże różnice między hostami. Jeśli zainstalujesz świeżego drupala po wyjęciu z pudełka, czy wydajność jest w porządku? Jeśli nie, czas poszukać innego hostera.
źródło
FWIW nasz prawie 20-węzłowy węzeł Drupal 6.x miał pewne problemy z wydajnością i zdecydowałem się przenieść wszystkie tabele do InnoDB. To było łatwe, a sposób, w jaki sobie z tym poradziłem, to użycie mysqldump do zrzucenia całej zawartości do pliku sql, użycie edytora (sed) do zastąpienia wszystkich wystąpień MyISAM do InnoDB, a następnie przeładowanie bazy danych z tego pliku. Jedną z wad jest to, że nie można odzyskać miejsca z bazy danych InnoDB (IIRC), ale dopóki przechowujesz zduplikowane tabele w oddzielnej bazie danych, nie powinieneś mieć problemów. Aha, i zauważyliśmy znaczny wzrost wydajności. A ponieważ mamy cztery instancje Drupala, sama liczba plików tabel została wyeliminowana z systemu plików (tak, są one zawarte w samym pliku InnoDB). To jest moja wartość .02 $.
źródło
innodb_file_per_table
opcji.for tbl in $(mysql -Ne 'show tables' databasename); do mysql -e "ALTER TABLE $tbl ENGINE=InnoDB"; done
. Dodaj odpowiednie opcje (-uroot -psomepass
na przykład) do dwóchmysql
s, jeśli to konieczne.Tylko jedna głowa do góry. Jeśli korzystasz z Drupal 6, możesz zainstalować moduł DBTuner ; może łatwo przenosić tabele z MyISAM do InnoDB. Tak, jest na to moduł!
źródło