Jak w tytule: Czy istnieje krótka lista kandydatów do migracji tabel do InnoDB? I co powinno pozostać MyISAM.
Niektóre dodatkowe informacje
- Witryna ma dość duże obciążenie odczytu, ale wstawia około 10 węzłów na godzinę, z tagami i tym podobne.
- W dużym stopniu korzystamy z CCK (ogromna ilość znormalizowanych tabel w postaci
content_field%
). - Korzystamy również z widoków dla wszystkich naszych bloków i stron; ale wiele z nich kwalifikuje się do zastąpienia niestandardowymi modułami (w celu zmniejszenia liczby zapytań do bazy danych i ciężkości tych zapytań).
- Użytkownicy są anonimowi; z wyjątkiem kilku zalogowanych edytorów i webmasterów.
performance
database
berkes
źródło
źródło
Odpowiedzi:
Powinieneś przekonwertować wszystkie dane na InnoDB, aby zapobiec problemom z blokowaniem tabeli. Oto jednak kilka rzeczy do przemyślenia:
Indeksowanie FULLTEXT
Obecnie tylko MyISAM obsługuje indeksowanie FULLTEXT. Indeksowanie FULLTEXT dla InnoDB jest obecnie w fazie prac dla MySQL 5.6, ale nie jest gotowe do produkcji . Jeśli masz jakieś tabele Drupal, które mają indeksy FULLTEXT, nie można ich teraz przekonwertować na InnoDB.
AKTUALIZACJA przy indeksowaniu PEŁNYM TEKSTEM
MySQL 5.6 jest teraz GA (obecnie do użytku produkcyjnego). Wypróbuj indeksowanie FULLTEXT w InnoDB.
Aby zlokalizować tabele, które mają
FULLTEXT
indeks, uruchom następujące zapytanie:Jeśli nie wrócą żadne wiersze, przekonwertuj wszystkie tabele InnoDB na zawartość twojego serca. Napisałem wcześniejszy post na temat konwertowania wszystkich tabel MyISAM na InnoDB przy użyciu tylko mysql .
Replikacja MySQL
Jeśli masz duże środowisko do odczytu, odczyty mogą przebiegać szybciej w MyISAM, jeśli wykonasz następujące czynności:
--skip-innodb
plik /etc/my.cnf na wszystkich urządzeniach Slave (konwertuje tabele na MyISAM podczas ładowania danych do urządzenia Slave)ALTER TABLE tblname ROW_FORMAT=FIXED;
ROW_FORMAT=FIXED
ze stron 72, 73. Spowoduje to wewnętrzną konwersję wszystkich pól VARCHAR na CHAR. Sprawi to, że tabela MyISAM będzie większa, ale wykonanie na niej SELECT będzie znacznie szybsze. Mogę osobiście to poświadczyć. Kiedyś miałem stół o pojemności 1,9 GB. Zmieniłem format za pomocąALTER TABLE tblname ROW_FORMAT=FIXED
. Tabela skończyła się 3,7 GB. Szybkość WYBORÓW przeciwko niemu była o 20-25% większa bez poprawy lub zmiany czegokolwiek innego.Jedyny problem związany z tym polega na uświadomieniu Twojej aplikacji osobnych czytników podrzędnych.
EPILOG
Jeśli patrzysz na inne korzyści, jakie ma każdy silnik pamięci, sprawdź DBA StackExchange:
Apr 14, 2011
: Jakie są główne różnice między InnoDB i MyISAM?Sep 20, 2011
: Najlepsze z MyISAM i InnoDBMay 02, 2012
: Który silnik pamięci masowej mysql wybrać?May 03, 2012
: Który jest szybszy, InnoDB lub MyISAM?źródło
Ponieważ twoja strona jest przeznaczona do odczytu, po prostu przekonwertowałbym wszystkie tabele na InnoDB. Będziesz wtedy mógł zoptymalizować wydajność odczytu, odpowiednio dobierając pulę buforów InnoDB i pamięć podręczną zapytań. W ten sposób osiągamy kilka tysięcy zapytań na sekundę na dedykowanych serwerach baz danych w naszej infrastrukturze hostingowej Drupal.
źródło