Dziś rano zauważyłem, że obciążenie serwera MySQL było wysokie. Max powinien wynosić 8, ale w pewnym momencie osiąga 100 punktów. Kiedy sprawdziłem listę procesów, znalazłem mnóstwo zapytań aktualizacyjnych (proste, zwiększające "hitcounter"), które były w stanie query end
. Nie mogliśmy ich zabić (cóż, mogliśmy, ale pozostali w stanie nieskończonym przez cały czas) i nasza strona została zatrzymana.Mnóstwo stanów "Koniec zapytań" w MySQL, wszystkie połączenia wykorzystane w ciągu kilku minut.
Mieliśmy wiele problemów z ponownym uruchomieniem usługi i musieliśmy przymusowo zabić niektóre procesy. Kiedy to zrobiliśmy, udało nam się przywrócić system MySQLd, ale procesy zaczęły się natychmiastowo odbudowywać. O ile nam wiadomo, żadna konfiguracja nie została zmieniona w tym momencie.
Więc zmieniliśmy innodb_flush_log_at_trx_commit
z 2 na 1 (zauważ, że potrzebujemy zgodności z ACID) w nadziei, że to rozwiąże problem i ustawimy połączenia w PHP/PDO jako trwałe. To wydawało się działać przez około godzinę, a potem połączenia znów zaczęły biec.
Na szczęście, ustawiłem serwer niewolników kilka miesięcy temu i byłem w stanie go promować i na razie to trwa, ale muszę zrozumieć, dlaczego tak się stało i jak go zatrzymać, ponieważ niewolnik serwer jest znacznie słabszy w porównaniu do mastera, więc muszę szybko wrócić.
Czy ktoś ma jakieś pomysły? Czy to możliwe, że coś wymaga oczyszczenia? Nie wiem co, może binarne logi czy coś takiego? Wszelkie pomysły w ogóle? Niezmiernie ważne jest, abyśmy mogli odzyskać ten serwer jako mistrz ASAP, ale szczerze mówiąc nie mam pojęcia, gdzie szukać, a wszystko, co do tej pory próbowałem, spowodowało jedynie tymczasową naprawę.
Pomoc! :)
Dzięki, to była poprawka dla naszego problemu.Dla innych znalezienie tej odpowiedzi, jeśli używasz klastra mysql Galera, sprawdź wszystkie serwery pod kątem miejsca na dysku, ponieważ utkną one na "końcu zapytania", nawet jeśli jest to tylko jeden z węzłów pełnych. – chris