it-swarm.dev

Czy powszechną praktyką jest mieszanie tabel InnoDB i MyISAM na tym samym serwerze?

Mam jedną bazę danych o wielkości około 4,5 GB działającą na serwerze z 8 GB pamięci RAM. Zdecydowana większość tabel to MyIsam (około 4,3 GB), ale wkrótce będę zamierzam konwertować niektóre z nich do InnoDB. (To będzie powolny proces, początkowo skupiający się na tabelach najbardziej intensywnych).

Czy jest coś nie tak z uruchomieniem dedykowanego serwera, na którym istnieją oba typy silników pamięci masowej?

21
Derek Downey

Nie ma nic źle z użyciem wielu silników pamięci masowej na tej samej maszynie fizycznej, o ile rozumiesz zalety i wady każdego z nich. Istnieją względy wydajności, ograniczenia funkcji i przypadki użycia dla wszystkich typów pamięci wtyczek.

Na przykład, jeśli masz mały stolik, który pisze w 90%, możesz wybrać MyISAM. Jeśli dane można łatwo zregenerować i jest to niewielka tabela, powiedzmy do kolejkowania, możesz wybrać Pamięć. Jeśli masz tabelę, która odczytuje w 90%, a dane muszą tam być, gdy ich szukasz, prawdopodobnie wybierzesz silnik pamięci masowej obsługujący transakcje i konfigurowalną atomowość, taki jak InnoDB. Jeśli chcesz mieć dostęp przez system plików bez szkodliwych danych, możesz wybrać CSV.

Niemniej jednak możesz bezpiecznie używać wielu silników pamięci masowej w tym samym schemacie, a także fizycznego hosta.

Zauważmy jednak, że twoje bufory odgrywają rolę w tym całym bałaganie. Jeśli korzystasz zarówno z MyISAM, jak i InnoDB, musisz uważać, aby Twój key_buffer i innodb_buffer_pool nie rywalizowały. To z twojej strony wymaga starannego planowania, ale to właśnie robimy.

18
randomx

Nie mogę ci powiedzieć, czy jest to powszechna praktyka. Mogę powiedzieć o własnym doświadczeniu.

Zawsze używam najlepszego narzędzia do tego zadania, więc cały czas miksuję silniki. Większość moich projektów używa MyISAM jako domyślnego silnika.

Kiedy potrzebuję specjalnych funkcji dostępnych tylko w InnoDB, wybieram to.

Gdy tabela jest w większości tylko do odczytu, wybieram silnik archiwizujący, zanim będę mógł mrugnąć.

Wiedząc, że serwer maszynowy ma wystarczającą ilość pamięci, wszystkie moje dane tymczasowe są przechowywane w tabelach sterty.

Widziałem w przeszłości pewne spowolnienia mieszające MyISAM i InnoDB, ale nie jest to specyficzny problem MySQL. Jest to problem projektowy, który nie pojawia się, gdy używasz tylko jednego silnika. Właściwie użycie niewłaściwego silnika powoduje, że większe spowolnienie nie ma znaczenia, czy jest to tylko MyISAM, tylko InnoDB lub połączenie obu. Trudno zdefiniować formułę, aby wiedzieć, kiedy nastąpi spowolnienie. Tylko rzeczywiste testy mogą ci to powiedzieć.

Oczywiście nie można było zachować integralności i spójności, łącząc InnoDB i MyISAM w jednym zapytaniu.

7
Maniero

Staram się unikać mieszania tabel MyISAM i InnoDB w tej samej bazie danych, ale dzieje się to raczej ze względów higienicznych niż praktycznych. Uważam jednak, że przydatne jest posiadanie bazy danych z tabelami MyISAM do wyszukiwania pełnotekstowego, dzięki czemu mogę uruchomić ją na stronach. Przechowywanie go w osobnej bazie danych z kluczem obcym dla każdego wpisu ułatwia innym programistom pracującym na bazie danych, aby zobaczyć, co się dzieje.

0
Kenzo