Niektóre tabele Magento nie są InnoDB, czy konwersja wszystkich tabel na InnoDB jest bezpieczna?


16

Używam repliki odczytu AWS RDS. Ciągle ma problemy ze stołami silnika pamięci Magento. Do tworzenia kopii zapasowych i odczytu replik RDS uwielbia InnoDB. Czy mogę bezpiecznie zmienić wszystkie tabele na InnoDB?

Ponadto otrzymuję następujące ostrzeżenie z AWS:

Instancja DB magento-monin-prod-db zawiera tabele MyISAM, które nie zostały zmigrowane do InnoDB. Te tabele mogą mieć wpływ na twoją zdolność do przywracania punktu w czasie. Rozważ konwersję tych tabel do InnoDB. Proszę zapoznać się z http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.MySQL.CommonDBATasks.html#MySQL.CommonDBATasks.Tables

Możliwa odpowiedź

Nadal jestem zainteresowany opiniami. Dodam to jako odpowiedź, jeśli nie znajdę żadnych problemów w ciągu najbliższych 24 godzin. Dotychczasowe kroki, które podjąłem, wydają się być bezpieczne. Moją największą troską były tabele Magento Memory Engine (tabele kończące się na in_tmp) i wpływ, jaki może mieć na indeksowanie.

Oto co zrobiłem:

  1. SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE (ENGINE = 'Memory' OR ENGINE='MyIsam') AND TABLE_SCHEMA='magento_db'

    • Dla mnie zwróciło to głównie tymczasowe tabele indeksu i tabele modułów magento, więc nie ma zbyt wielu krytycznych tabel rdzenia, o które należy się martwić, i mało tabel, które mogę łatwo wykonać inną tabelę zmian, jeśli coś trafi w wentylator.
  2. Dla każdej zwróconej tabeli wykonałem: Alter table {table-name} ENGINE=InnoDB;

Byłbym zdenerwowany, aby spróbować, jeśli żaden z twoich stołów nie jest InnoDB. Ale, jak powiedziałem wcześniej, w mojej instancji było tylko kilka podstawowych tabel, które wymagały modyfikacji.


Czy działasz już od dłuższego czasu w produkcji? Jeśli tak, jak idzie - czy spowodowało to jakieś problemy? Myśląc przede wszystkim o tabelach indeksów * _tmp, które są obecnie silnikiem MEMORY.
Michael Parkin

1
Nie zauważyłem niczego niezwykłego.
TylersSN

Świetnie, dziękuję za potwierdzenie - postaramy się to zrobić i zdamy relację.
Michael Parkin

@michael parkin pamiętaj, że korzystamy z wyszukiwania Solr. Zobacz inne odpowiedzi, które mówią, jak może to potencjalnie wpłynąć na wyszukiwanie.
TylersSN

1
Uruchomiliśmy to w większości naszych witryn produkcyjnych (MariaDB 10.0), wszystkie tabele (łącznie z pamięcią) działają jako InnoDB - działa świetnie
Michael Parkin

Odpowiedzi:


11

Można zmienić typ danych na InnoDB, zakładając, że spełniony jest jeden z następujących warunków:

  1. Używasz MySQL 5.6.4+, w którym silnik pamięci InnoDB obsługuje wyszukiwanie pełnotekstowe
  2. Nie używasz domyślnej funkcji wyszukiwania Magento, która opiera się na podstawowych funkcjach wyszukiwania pełnotekstowego MyISAM. Ta funkcjonalność jest na początku kłopotliwa, a zestaw funkcji dostępnych w domyślnym wyszukiwaniu Magento pozostawia wiele do życzenia, dlatego sugerowałbym użycie Lucene lub Sphinx lub najlepiej jeszcze obsługiwanego wyszukiwania w Algolii .

Osobiście polecam to zrobić za pomocą Magento DB Repair Tool, aby zminimalizować ryzyko, a także sprawdzić, czy nie występują inne odchylenia w konfiguracji DB lub problemy. InnoDB jest idealnym silnikiem, pomimo ograniczeń pełnotekstowych .


1
Używamy wyszukiwania słonecznego. Powinniśmy więc mieć jasność co do poszukiwań.
TylersSN,

W ogóle nie uważałbym InnoDB za idealny silnik. Jest bardzo powolny w porównaniu do MyISAM, jeśli masz wiele zapytań. Często słyszę, że InnoDB szybciej wykonuje aktualizacje, a większość zapytań to aktualizacje, więc jest szybsze. Widzę całkowite przeciwieństwo. Dla każdej witryny mam znacznie więcej zapytań, które aktualizują / dodają zapytania. Próbowałem przełączyć wszystkie moje tabele na InnoDB, a czas ładowania strony skrócił się zasadniczo z braku opóźnienia (może 0,1 sekundy) do 10 sekund! Przekształciłem wszystko z powrotem do MyISAM, ponieważ jest to idealny silnik dla prędkości (i obsługuje wyszukiwanie pełnotekstowe).
Tim Eckel,

Tim, „KIND” się zgadzam, głównie dlatego, że ciągle widziałem, że @ ben-lessani-sonassi jest po prostu całkowicie sprawdzone, a MySQL rzadko jest PRAWDZIWĄ przeszkodą w ogólnej wydajności / # INNYCH systemów, które potrzebuję optymalizacji odpowiedzi poniżej 800 ms nawet przy obciążeniu ALE InnoDB jest kluczem b / c Mage Core pisze do DB ~ 10X, aby rejestrować akcję „zobacz” każdego użytkownika plus Solr jest najlepszy do wyszukiwania perf i jakości :)
Bryan 'BJ' Hoffpauir Jr.

1
Jak więc konwersja tego, co powinno być InnoDB, obsługuje wszystkie te relacje kluczy obcych i jak kompletne są usunięcia, które zależą od usunięcia kaskady z tych relacji z kluczem? Innymi słowy, w jaki sposób radzisz sobie ze śmieciami, które pozostaną, nie mając relacji?
Fiasco Labs,

@FiascoLabs Minęło trochę czasu, odkąd sprawdziłem ten wątek komentarza, ale celem Q / A jest konwersja z MyISAM do InnoDB. Zgaduję, że te, które mają funkcje Relacyjne, o których prawdopodobnie wspomniałeś, to InnoDB. MyISAM nie obsługuje transakcji FK, ani jak MySQL 5.7 chociaż InnoDB robi choć odbiega od standardu SQL trochę
Bryan „BJ” Hoffpauir Jr.


2

Właśnie zmieniłem domyślny silnik MySQL na InnoDB i większość moich tabel Magento w cudowny sposób przekształciło się w InnoDB (niektóre nadal są MyISAM, a niektóre Memory).

Pomyślałem, że podzielę się tym ...

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.