Mam problem z wydajnością Magento 2.1
W moim sklepie mam 90 000 produktów. Dodałem te produkty do mydła. Kiedy to zrobiłem, zajęło to około 7 sekund dla każdego artykułu (produktu?) (Zapytanie> Odpowiedź). Podsumowując, zainicjowanie wszystkich produktów zajęło kilka dni.
Teraz wszystkie produkty są w sklepie. Przez kilka tygodni muszę aktualizować niektóre artykuły (produkty). Kiedy robię to ponownie z mydłem, zajmuje to tyle samo czasu. Kiedy robię aktualizacje, sklep jest bezużyteczny. Przykładowe zapytanie i odpowiedź znajdują się tutaj: https://pastebin.com/aqnMJk98 https://pastebin.com/UAh0h8Zz
Mój serwer ma 12-rdzeniowy procesor, 24 GB pamięci RAM i dysk SSD. Działa z systemem Ubuntu 16.04 z Apache2 PHP7-fpm i MYSQL.
Kiedy oglądam proces aktualizacji, widzę, że 5 rdzeni z MySQL ma 100% PHP działa trochę, a reszta jest bezczynna. Baran jest tylko niewielką ilością użytą, iotop
mówi, że mój dysk SSD się nudzi.
Obserwowałem wydajność bazy danych i zobaczyłem, że Magento wystrzelił w procesie dodawania tysiące poleceń do bazy danych. Czy to jest ok?
Kiedy aktualizuję go za pomocą importu Magento CSV, jest to znacznie szybsze.
Co mogę zrobić, aby przyspieszyć działanie Magento2? W tej sytuacji nie można dobrze współpracować z tym sklepem.
źródło
Odpowiedzi:
Import zbiorczy
kluczem jest użycie importu wsadowego, jak sam wspomniałeś:
Zastanów się nad przemyśleniem interfejsu API SOAP i zmień go na tryb zbiorczy, np. Możesz utworzyć oprogramowanie pośrednie, które zaakceptuje dane produktu i wygenerować plik csv, który później można przesłać do Magento.
Istnieje kilka rozszerzeń stron trzecich, które pomagają w tym.
Ogólne porady dotyczące wydajności
Możesz spróbować przyspieszyć sam Magento, ale dostaniesz ~ 1-10% wzmocnienia z każdej poprawy, gdy wykonasz wiele z nich, korzyść jest zwielokrotniona:
Jeśli wszystkie powyższe czynności zostały wykonane i potrzebujesz większej wydajności:
źródło
Problem polega na tym, że połączenia SOAP są bardzo drogie. Jeśli uruchomisz żądanie SOAP, aby dodać / edytować / usunąć produkt, Magento musi dołączyć do wielu tabel, aby uzyskać wszystkie niezbędne informacje. Takie zachowanie w połączeniu z samym PHP spowalnia liczbę produktów lub danych, które chcesz przetworzyć.
Sam Magento zaleca 5-węzłowy klaster serwerów (1 x DB, 4 x Webserver) do obsługi ruchu.
Poleciłbym skalowanie w poziomie, na przykład za pomocą AWS. Może to mieć większy wpływ na Twoją firmę, ale IMHO nie będzie w stanie ulepszyć Magento, aby uzyskać lepszą wydajność.
W ramach AWS należy użyć funkcji grupy automatycznego skalowania, która odpowiada za liczbę uruchomionych serwerów. Za każdym razem, gdy dodajesz dane, uruchamiane są nowe serwery, aby poradzić sobie z presją. To samo można zrobić z AWS RDS (DB Service) bardzo łatwo i szybko.
W przypadku, gdy AWS nie jest opcją, możesz spróbować ulepszyć Magento i PHP. Polecam sprawdzić ustawienia:
źródło
Ten link wyjaśnia, jak dostosować zużycie pamięci MySQL. Ponieważ masz tyle pamięci RAM, możesz zyskać na przydzieleniu większej ilości do MySQL. To może być łatwiejsze i mniej kosztowne ($) rozwiązanie niż budowa dedykowanego serwera bazy danych.
Może się również okazać, że narzędzie MySQL Workbench jest pomocne w tym ulepszaniu, a także w monitorowaniu tego, co ogólnie robi MySQL. Narzędzie jest wykonane przez Oracle / MySQL; nie jest to żadna przypadkowa aplikacja shareware.
źródło