Baza danych Wordpress Slow - czy powinienem przejść na InnoDB?

12

Mam witrynę WordPress z ponad 10 000 postów i wszystko zaczyna się robić bardzo wolno, gdy dodam i edytuję posty. Strony ładują się ładnie i szybko dla użytkowników, wraz z listami administracyjnymi postów, ale to wtedy, gdy pojawiają się zapisy lub aktualizacje, serwer przechodzi w 100% na procesor i zajmuje dużo czasu (czasem dłużej niż limit czasu PHP 60s).

Myślę, że może to mieć związek z blokowaniem MyISAM na poziomie stołu i myślę o przełączeniu na InnoDB. Jakie są tego konsekwencje?

Niektóre statystyki:

select  - per hour ~22k
update  - per hour ~7.6k
set option  - per hour ~7k

Wiem, że mogę dokonać wielu innych optymalizacji, ale uważam, że może to mieć największy wpływ.

Dzięki

Edycja : Znalazłem jeden z głównych problemów powodujących spowolnienie, to YARPP (Yet Another Related Posts Plugin) za każdym razem regenerował „powiązanie”, i wydawało się, że jest to spowodowane obecnością znaczników 2k +. Wyłączyłem opcję „rozważ tagi”, która znacznie przyspieszyła.

Inne wtyczki, które regenerują rzeczy, mogą powodować tego rodzaju problemy, takie jak niektóre wtyczki map witryn XML.

Tak więc mój natychmiastowy problem został rozwiązany, chociaż nadal chciałbym usłyszeć dobrą odpowiedź na InnoDB vs MyISAM dla Wordpress!

Adam Heath
źródło

Odpowiedzi:

11

Rzeczywiście przeszedłbym na InnoDB. Blokowanie tabel / blokowanie wierszy było od dawna dyskutowane przez wielu. Zawsze wybrałbym InnoDB bez użycia rąk. Istnieje jednak inny głęboki powód, aby wybrać InnoDB ... CACHING .

Podczas gdy większość ludzi chwali się tym, że MyISAM jest szybszy do odczytu, większość zapomina, że ​​wiele pamięci podręcznej dla MyISAM, która nazywa się pamięcią podręczną kluczy (ustawioną przez key_buffer_size), buforuje tylko strony indeksu z plików .MYI. Nigdy nie buforuje stron danych. Ma oficjalnie maksymalnie 4 GB w systemach 32-bitowych. 8 GB to najlepsze maksimum dla wersji 64-bitowej.

Pula buforów InnoDB buforuje dane i strony indeksowe. W zależności od posiadanego serwera możesz buforować do całego zestawu danych w pamięci RAM. Możesz dostroić InnoDB do 80% RAM i 10% dla DB Conenctions, i pozostawić 10% dla OS. Dotyczy to nawet różnych systemów operacyjnych .

Polecam te rzeczy klientom Drupala ze wspaniałym sukcesem. Dotyczy to również Wordpress . Zapewniłem obsługę DB dla klientów z WordPress. Te same ulepszenia.

Zawsze możesz skonfigurować pamięć dla InnoDB bardziej efektywnie niż MyISAM. Zawsze istnieje sposób na dostosowanie programu InnoDB do własnych potrzeb w zakresie wydajności . W miarę wzrostu ilości danych staną się one w końcu wymogiem .

RolandoMySQLDBA
źródło
6

InnoDB prawdopodobnie ci nie pomoże - blokowanie na poziomie strony / wiersza pomaga złagodzić spór, ale nie wydaje się, żeby to był twój problem.

Istnieje wiele rzeczy, które sugerują, że MyISAM jest wolniejszy niż InnoDB w przeciętnym scenariuszu na blogu (znacznie więcej odczytów niż zapisów).

Przed dokonaniem zmiany powinieneś przynajmniej wykonać następujące czynności

  • uruchom mysqltuner, który da ci kilka porad dotyczących konfiguracji (nie jest to nieomylne lub choćby wszyscy wiedzą)
  • włącz powolne rejestrowanie zapytań, pozostaw na około jeden dzień, a następnie zacznij przeglądać dziennik i WYJAŚNIAĆ zapytania, aby zobaczyć, co się dzieje

Z własnego doświadczenia odkryłem, że dodanie indeksu do nieindeksowanego pola na wp_comments pomogło masowo w mojej szczególnej sytuacji (okresy komentowania, gdy około 10 osób mogło próbować komentować w tym samym czasie), i możliwe, że to się dowie jakie zapytania działają powoli i dlaczego może pomóc ci lepiej zrozumieć problem oraz PRAWDZIWE rozwiązanie!

anu
źródło