Obecnie widzę, że dla tabeli bazy danych z bardzo prostym schematem (około 5 pól) wstawia ona nowe rekordy z szybkością nieco poniżej ~ 50 wstawek / sekundę, w moim lokalnym środowisku programistycznym (dysk SSD) - to z brak obserwatorów w modelu wypełniającym powiązane tabele.
Używając bezpośredniego SQL widzę spore ulepszenie - ~ 1800 wstawek / sekundę. Myślimy o próbie optymalizacji wydajności naszych modeli, ale oczywiście nie chcemy stracić całej ładnej stabilności i elastyczności, jaką zapewnia nam rdzeń Magento.
Zastanawiam się, czy ktoś już wybrał tę drogę i czy są jakieś łatwe wygrane pod względem składników warstwy modelu, które można stosunkowo bezpiecznie ominąć, co da znaczny wzrost wydajności.
Rzeczy jak:
- Rozpoznawanie nazw klas
- przed i po zapisaniu zdarzeń
- Wysyłki zdarzeń
- Transakcje
- itp.
AKTUALIZACJA: Kłamałem, w rzeczywistości było kilka dodatkowych zapytań odpalanych przez obserwatorów lub afterSave (), które widziałem podczas przeglądania dziennika zapytań bazy danych. Benchmarking względem całkowicie prostej jednostki daje mi ~ 300 wierszy / sekundę w modelach Magento - tylko narzut MySQL to transakcje.
źródło
Odpowiedzi:
Jedną rzeczą, która może przyspieszyć całą witrynę, jest usunięcie wszystkich odniesień do
Varien_Profiler
witryny produkcyjnej. Nawet jeśli profiler jest wyłączony, zawsze sprawdza, czy jest włączony, więc każde wywołanieVarien_Profiler::
spowoduje wyświetlenie dodatkowejif
instrukcji. Oczywiście usunięcie wszystkich tych połączeń wiąże się z kosztem niemożności korzystania z profilera. Może to jednak przyspieszyć działanie całej witryny o około 5% (jest to subiektywne doświadczenie, ale WIELE połączeń zVarien_Profiler
całym Magento). W rzeczywistości napisałem mały skrypt powłoki, aby automatycznie komentować te wywołania we wszystkich plikach i dodam to do mojego postu jutro, kiedy będę w pracy i będę mieć gotowy kod.Zgodnie z obietnicą teraz kod do komentowania tych połączeń:
Powinno to zostać uruchomione w konsoli linux zarówno w aplikacji /, jak i w folderze lib /. Może być później konieczne ręczne dostosowanie pliku /lib/Varien/Profiler.php. Pamiętaj też, że powinieneś przetestować to dokładnie w bezpiecznym środowisku przed uruchomieniem go na żywo - ale myślę, że powinno to być oczywiste;)
źródło
find . -type f -exec grep -qF 'Varien_Profiler' {} \; -exec sed -i '/Varien_Profiler/d' {} \;
jeśli wolisz szybki oneliner.Podczas wykonywania wielu zapisów w modelach Magento najlepiej wyłączyć indeksator Magento, który spowalnia proces:
I włączanie, gdy skończysz:
źródło