Moja strona internetowa ma problemy z płatnością. Używam Magento Enterprise 1.8, a mój moduł kasowy to Onestepcheckout Idev.Magento 1.8: Zablokuj limity czasu oczekiwania, gdy klient jest sprawdzany
Problem, który widzimy, polega na tym, że tabela eav_entity_store zajmuje bardzo długi czas (do 51 sekund), aby zwrócić numer zamówienia do Mage_Eav_Model_Entity_Type.
Wiem, że uruchomienie kwerendy w celu uzyskania tej operacji jest uruchamiane jako "DO AKTUALIZACJI", więc dostęp do wiersza jest zablokowany do momentu zakończenia transakcji. Sprawdziłem inne części kodu, a także kod PHP w trakcie transakcji, w której wiersz jest zablokowany (używamy InnoDB, więc blokada powinna zostać zwolniona po zatwierdzeniu transakcji) i po prostu nie widzę cokolwiek tam (lub w dziennikach powolnych zapytań), które powinny powodować blokadę oczekiwania w pobliżu 51 sekund.
Rozważałem, że żądania mogą być zbierane i powoli skracać czas oczekiwania, ale widzę, że czas zapytania wynosi od 6ms do 20kms do 50k ms 1,2,3. Nie jest to kwestia 100-200 wniosków złożonych, ponieważ jest ich tylko kilkadziesiąt dziennie.
Jestem świadomy, że MySql używa blokady rodzicielskiej, ale nie ma żadnych FK związanych z tą tabelą. Istnieją dwa indeksy BTREE, które w pewnym momencie były FK, ale od tego czasu zostały zmienione (co miało miejsce wiele lat temu). Dla tych, którzy są nie-Magento savy, tabela eav_entity_store ma mniej niż 50 wierszy i ma tylko 5 kolumn szerokości (4 smallint i varchar). Poważnie wątpię w tabelkę lub niewłaściwe indeksowanie jest sprawcą. W duchu TLDR powiem jednak, że dwa indeksy BTREE to dwie kolumny, które wybieramy z tej tabeli.
Jedną z możliwości jest to, że może być konieczne zastąpienie dwóch indeksów indeksem złożonym, ponieważ TYLKO odczytuje tę tabelę z zapytania, które czyta (Z [kolumna z indeksem A] I [kolumna z indeksem B]). Po prostu nie wiem, czy blokowanie na poziomie wiersza uniemożliwiłoby temu zapytaniu uzyskanie dostępu do innego wiersza w tabeli z indeksami aktualnie znajdującymi się w tabeli.
W tym momencie przekonałem się, że podstawowa kwestia jest ściśle związana z DB, ale wszelkie porady Magento lub MySql w tej sprawie byłyby bardzo mile widziane. Ktoś, kto wciąż czyta to, może miejmy nadzieję, że doceniłem już kilka opcji i jestem tu poważnie zaskoczony. Wszelkie informacje, które Twoim zdaniem mogą pomóc, są mile widziane. Dzięki.
Edit Dokładny błąd widzimy to: wiadomość o błędzie: SQLSTATE [HY000]: Błąd ogólny: 1205 Blokada limit czasu oczekiwania przekroczone; spróbuj ponownie uruchomić transakcję
Czy można odtworzyć po uruchomieniu powolnego zapytania ręcznie? W takim przypadku możesz go profilować. –
Niestety nie mogłem się rozmnażać. DB hosting odbywa się zdalnie. Czekałem na wiadomość od DBA, aby zobaczyć, jakie informacje mogą dać. Zaktualizuję tutaj, gdy już to zrobią. –
ten sam problem na Magento 1.8 ... może to jest problem po stronie UPS, a nie magento? – WonderLand