MyISAM to jeden z najpopularniejszych silników pamięci masowej w MySQL. MyISAM często jest drugim wyborem po InnoDB - w tym poście na blogu postaramy się dowiedzieć, jak najlepiej pracować z tym silnikiem.
Co to jest MyISAM?
MyISAM to jeden z silników pamięci masowej MySQL. MyISAM opiera się na ISAM (Indexed Sequential Access Method), algorytmie indeksowania opracowanym przez IBM, który umożliwia szybkie pobieranie informacji z dużych zbiorów danych. Jednak nie radzi sobie zbyt dobrze podczas jednoczesnego czytania i pisania do jednej tabeli, ze względu na blokowanie tabeli. Nie obsługuje również transakcji.
Dla niektórych inżynierów MySQL ten silnik jest najpopularniejszym wyborem po InnoDB:silnik pamięci masowej MyISAM był jedynym silnikiem pamięci masowej dostarczonym przez MySQL w 2005 roku i był dostępny do użytku przez ponad 20 lat. MyISAM był domyślnym silnikiem pamięci masowej dla MySQL do wersji 5.5.
MyISAM od środka
Ilustracja tego, jak MyISAM działa od środka, nie jest przedmiotem tego bloga, ale możemy dostarczyć Ci ustawienia, które pomogą Ci zoptymalizować wydajność silnika:
- Myisam_sort_buffer_size definiuje bufor, który jest przydzielany, gdy indeks jest sortowany przez wykonanie zapytań REPAIR, CREATE INDEX lub ALTER TABLE.
- Key_buffer_size określa rozmiar bufora używanego do bloków indeksu w tabelach MyISAM. Zwiększenie tego parametru może prowadzić do lepszej obsługi indeksu.
- Sort_buffer_size opisuje rozmiar bufora przydzielonego dla wątków, które muszą wykonać operacje sortowania.
- Read_buffer_size opisuje rozmiar bufora, który jest przydzielony dla wątków wykonujących sekwencyjne operacje skanowania.
- Write_buffer_size opisuje rozmiar bufora zapisu.
Te cztery parametry są ważne, ale chociaż są one ważne, należy również zwracać uwagę na zmienną key_buffer_size. Zmienna key_buffer_size określa rozmiar buforów indeksu przechowywanych w pamięci - pomyśl o tym jako o odpowiedniku innodb_buffer_pool_size, ale dla MyISAM. Jeśli twoje serwery składają się głównie z tabel MyISAM, możesz przydzielić około 25% lub więcej dostępnej pamięci RAM na serwerze do zmiennej key_buffer_size. Istnieje również inny sposób określenia, jaka powinna być wartość parametru key_buffer_size - wystarczy porównać wartość key_read_requests (łączną wartość żądań odczytu indeksu) z wartością key_reads (wartość key_reads to liczba żądań, które musiały być odczytać z dysku). Wartości tych parametrów można pobrać, przeglądając zmienne stanu serwera (wystarczy wysłać zapytanie SHOW GLOBAL STATUS na serwerze MySQL). Warto również pamiętać, że jeśli key_reads zwraca dużą wartość, wartość key_buffer_size jest prawdopodobnie zbyt mała.
MyISAM i MySQL 8.0
Jeśli zapytasz kilku inżynierów MySQL, powiedzą, że MyISAM nie powinien być dłużej używany. Czemu? Cóż, niektórzy mówią, że z uwagi na fakt, że kiedy MySQL rozwinął się, dodali do InnoDB większość funkcji, które wcześniej można było zobaczyć tylko w MyISAM, skutecznie czyniąc MyISAM przestarzałym:
- Pełnotekstowe indeksy są dostępne w InnoDB od wersji 5.6.
- Przenośne przestrzenie tabel stały się dostępne w InnoDB od wersji 5.6.
- Indeksy przestrzenne stały się dostępne w InnoDB od wersji 5.7.
- Ostatnia aktualizacja tabeli stała się dostępna w InnoDB od wersji 5.7.
Czy nadal powinieneś używać MyISAM? Prawdopodobnie nie. Jest jednak jedno zastrzeżenie - pamiętaj, że proste zapytania COUNT(*) prawdopodobnie będą działać szybciej w MyISAM niż w InnoDB - MyISAM przechowuje liczbę w metadanych tabeli, InnoDB nie.
Korzystam z MyISAM i chcę przełączyć się na InnoDB, co mam zrobić?
Jeśli nadal używasz MyISAM i chcesz przełączyć się na InnoDB, po prostu przekonwertuj wszystkie swoje tabele na InnoDB. Oczywiście łatwiej to powiedzieć niż zrobić, ale oto prosty przewodnik:
- Sprawdź, które tabele w Twojej instancji MySQL używają MyISAM:
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘database_name’ AND ENGINE = ‘MyISAM’;
- Konwertuj wszystkie tabele MyISAM na InnoDB:
ALTER TABLE `table_name` ENGINE = InnoDB;
Jeśli nie chcesz uruchamiać wielu instrukcji ALTER TABLE jedna po drugiej, rozważ umieszczenie instrukcji ALTER TABLE w pętli. To wszystko – gotowe!
Podsumowanie
MyISAM to jeden z najpopularniejszych silników MySQL. Silnik był domyślny dla wersji MySQL do 5.5. Silnik jest jednym z najpopularniejszych wyborów po InnoDB, ale można go nazwać przestarzałym od MySQL 8.0 - MySQL już upewnił się, że wszystko, co można zrobić z MyISAM, można zrobić również podczas korzystania z InnoDB, więc w tym momencie MyISAM jest przydatny tylko wtedy, gdy chcesz, aby proste zapytania COUNT(*) były szybsze. Takie zapytania będą szybsze, ponieważ MyISAM przechowuje liczbę w metadanych tabeli — inne silniki MySQL tego nie robią.