Jump to content
  • 0

Temat stary jak świat - szybkość działania sklepu


Netteria.NET

Question

Witam

 

Wiem że o szybkości działania presty napisano miliony linijek. Sam nie raz optymalizowałem. Mam jednak przypadek, że ręce mi opadają. Wersja presty  1.6.0.9

Hosting nie jest wolny. Działa całkiem sprawnie.  W PA ustawiłem już wszystko co możliwe według swojej wiedzy i możliwości serwera. Zabrałem się nawet do naprawy i optymalizacji tabel bazy danych. Przestawiałem wersje PHP i na 5.6 i na 7.0 a nawet na 5.3. Nic nie przynosi rezultatu. Sklep jak wolno chodził tak wolno chodzi. Fakt miał swoją długą historię. Był wcześniej pod opieką innych firm i zaliczył przeniesienie z jednego serwera na inny, aktualizację z 1.4 do 1.6. Nie znam tych firm i nie wiem jaki poziom prezentują i może coś przy okazji zepsuły. No po prostu mi ręce opadają.

Co mogłem przeoczyć? Będę wdzięczny za każdą sugestię.

 

pozdrawiam

Sławek

Link to comment
Share on other sites

24 answers to this question

Recommended Posts

  • 0

Szczerze - zrób może ogłoszenie w dziale ofert, ktoś z forum się odezwie i sprawdzi co jest nie tak. Jest tutaj ogromna liczba zmiennych które mogą mieć na to wpływ, ale przeważnie są to:

- jakiś moduł coś spowalnia przez złe cachowanie lub zapytania bez indeksów do bazy

- Złe ustawienia wydajności w preście, ustawienie niepotrzebnych cache jak np FileFS

- błędne ustawienia serwera (bardzo rzadko)

Po sprawdzeniu tych zmiennych można relatywnie szybko wyeliminować błąd używając np profilowania dostępnego w preście.

  • Thanks 1
Link to comment
Share on other sites

  • 0

Dzięki za odpowiedź.

Dawanie ogłoszenia lekko mija się z celem bo ja sam to robię dla klienta.  Mam nadzieję, że to nic złego jak wykonując zlecenie za pieniądze (choć i tak już jestem z tym w plecy ale dla mnie wartość poznawcza też jest pożądana zawsze) zada tutaj pytanie:) Developerzy też chyba mogą sobie pomagać:)

Co do cache to to go w ogóle wyłączyłem. Nic w plikach nie zapisuje. Już miałem taki przypadek ze właśnie to zamiast pomagać to zamulało prestę. 

Serwer też raczej bym wykluczył.

Ale masz rację, jakiś cholerny moduł. Może zacznę je powoli wyłączać i sprawdzać. 

Dziękuję Ci za odpowiedź

 

pozdrawiam

Sławek

 

Link to comment
Share on other sites

  • 0
4 minutes ago, Netteria.NET said:

Co do cache to to go w ogóle wyłączyłem. Nic w plikach nie zapisuje. Już miałem taki przypadek ze właśnie to zamiast pomagać to zamulało prestę. 

No to może któryś moduł coś napsuł. Ok, napiszę zaraz to jak ja bym to zaczął sprawdzać. Mam chwilę wolną więc pozwolę sobie coś tutaj napisać i może komuś to w przyszłości pomoże.

  • Thanks 1
Link to comment
Share on other sites

  • 0

Zacząłem pisać ale nie mogę dodać zdjęć do postu więc poczekam z publikacją. Co do rady powyżej o profilowaniu - radzę wcześniej włączyć tryb serwisowy ponieważ wtedy każdy odwiedzający zobaczy zawartość Twoich tabel w bazie danych na spodzie. 

  • Thanks 1
Link to comment
Share on other sites

  • 0
5 minut temu, krzysiuus napisał:

_PS_DEBUG_PROFILING_ włącz na true i sprawdź co/lub która sekcja zamula sklep. 

Włączyłem i dostaję takie coś ale to na każdej stronie

Notice: Undefined index: style_enablehcblock in /www/mk560160-1/cache/smarty/compile/5a/aa/b9/5aaab9b2b0cd99f9f8174df3c74508d41137db87.file.header.tpl.php on line 881

Link to comment
Share on other sites

  • 0
3 minuty temu, krzysiuus napisał:

_PS_DEBUG_PROFILING_ włącz na true i sprawdź co/lub która sekcja zamula sklep. 

Włączyłem i wyskakuje mi tylko

Notice: Undefined index: style_enablehcblock in /www/mk560160-1/cache/smarty/compile/5a/aa/b9/5aaab9b2b0cd99f9f8174df3c74508d41137db87.file.header.tpl.php on line 881

Link to comment
Share on other sites

  • 0
3 minuty temu, krzysiuus napisał:

Odśwież stronę główną i na samym dole powinieneś dostać pełną rozpiskę danych z podziałem na zapytania do bazy jak i czas  odpowiedzi poszczególnych hook'ów w sklepie itd. 

 

Kurde faktycznie już mam mętlik w głowie:( Nie przewinąłem ekranu. Dzięki.

Link to comment
Share on other sites

  • 0

Ok widać że Time Spent querying 25808 ms jest tutaj winowajca - sprawdź teraz niżej które zapytania SQL tak długo się wykonują i z czego pochodzą. Coś po prostu bardzo długo odpytuje się w bazie danych i zobacz jakie to zapytanie, następnie odpal EXPLAIN w mysql i zobacz czy może jakiś moduł korzysta z zapytania które wyszukuje czegoś bez indeksów.

  • Thanks 1
Link to comment
Share on other sites

  • 0

Udało mi się wytropić najbardziej zamulające zapytanie. I dodatkowo zauważyłem, że niektóre tabele są typu myisam a w ps chyba wszystkie powinny być innoDB. W każdym razie zmieniłem hurtowo wszystkie ale wzrost szybkości jest niewielki. Problem nadal występuje.

Zapytanie to kobyła:

SELECT SQL_NO_CACHE p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, MAX(product_attribute_shop.id_product_attribute) id_product_attribute, product_attribute_shop.minimal_quantity AS product_attribute_minimal_quantity, pl.`description`, pl.`description_short`, pl.`available_now`,
pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, MAX(image_shop.`id_image`) id_image,
il.`legend`, m.`name` AS manufacturer_name, cl.`name` AS category_default,
DATEDIFF(product_shop.`date_add`, DATE_SUB(NOW(),
INTERVAL 20
DAY)) > 0 AS new, product_shop.price AS orderprice
FROM `ps_category_product` cp
LEFT JOIN `ps_product` p
ON p.`id_product` = cp.`id_product`
INNER JOIN ps_product_shop product_shop
ON (product_shop.id_product = p.id_product AND product_shop.id_shop = 1)
LEFT JOIN `ps_product_attribute` pa
ON (p.`id_product` = pa.`id_product`)
LEFT JOIN ps_product_attribute_shop product_attribute_shop
ON (product_attribute_shop.id_product_attribute = pa.id_product_attribute AND product_attribute_shop.id_shop = 1 AND product_attribute_shop.`default_on` = 1)
LEFT 
JOIN ps_stock_available stock
ON (stock.id_product = p.id_product AND stock.id_product_attribute = IFNULL(`product_attribute_shop`.id_product_attribute, 0) AND stock.id_shop = 1  AND stock.id_shop_group = 0  )
LEFT JOIN `ps_category_lang` cl
ON (product_shop.`id_category_default` = cl.`id_category`
AND cl.`id_lang` = 2 AND cl.id_shop = 1 )
LEFT JOIN `ps_product_lang` pl
ON (p.`id_product` = pl.`id_product`
AND pl.`id_lang` = 2 AND pl.id_shop = 1 )
LEFT JOIN `ps_image` i
ON (i.`id_product` = p.`id_product`) LEFT JOIN ps_image_shop image_shop
ON (image_shop.id_image = i.id_image AND image_shop.id_shop = 1 AND image_shop.cover=1)
LEFT JOIN `ps_image_lang` il
ON (image_shop.`id_image` = il.`id_image`
AND il.`id_lang` = 2)
LEFT JOIN `ps_manufacturer` m
ON m.`id_manufacturer` = p.`id_manufacturer`
WHERE product_shop.`id_shop` = 1
AND cp.`id_category` = 23 AND product_shop.`active` = 1 AND product_shop.`visibility` IN ("both", "catalog") GROUP BY product_shop.id_product ORDER BY cp.`position` asc
LIMIT 0,12

Zrobiłem z explain ale wiele mi to nie pomogło:(

No nic będę walczył dalej:) Jak coś odkryję to opiszę:)

Link to comment
Share on other sites

  • 0

Ja mam ~35.000 produktów, odpaliłem to zapytanie (oczywiście zmieniłem ID dane pod siebie) - czas wykonania: 0,032 sec

Jeśli zarówno w sklepie jak i samej bazie poprzez phpmyadmin tak samo długo sięwykonuje to stawiam na serwer. Masz dostęp do konfiguracji MySQL?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...