2009-04-06 6 views
7

Mam długotrwały proces w MySQL. Działa już od tygodnia. Jest jeszcze jedno połączenie z mistrzem replikacji, ale wstrzymałem przetwarzanie niewolników, więc nic innego się nie dzieje.Jak sprawdzić, czy proces MySQL utknął?

Jak mogę sprawdzić, czy ten proces nadal działa? Wiedziałem, że to zajmie dużo czasu, dlatego umieściłem to na własnej instancji bazy danych, ale jest to dłużej, niż się spodziewałem. Oczywiście, jeśli nadal pracuje, nie chcę go zabijać. Jeśli jest zombie, to nie wiem, jak wykonać pracę, która powinna być wykonana.

Jest w stanie "Wysyłanie danych". Tabela jest zbiorem InnoDB, ale bez żadnych odwołań FK, które są używane przez zapytanie. Status InnoDB nie zawiera żadnych błędów ani blokad od czasu rozpoczęcia kwerendy.

Wszelkie uwagi są mile widziane.

Odpowiedz

3

Musisz go zabić i wymyślić lepsze wskaźniki.

Zrobiłem pracę dla faceta. Miał stół z około 35 milionami rzędów. Jego proces wsadowy, podobny do twojego, przebiegał tydzień w tygodniu, bez żadnego widocznego końca. Dodałem kilka indeksów, wprowadziłem pewne zmiany w kolejności i metodach procesu wsadowego, i udało mi się wszystko zlikwidować do około dwóch i pół roku godzin. Na wolniejszej maszynie.

+0

Masz rację, że nie jest on indeksowany tak jak mógłby. Ale z pewnością poprawienie indeksów spowodowałoby, że proces zostanie uruchomiony, pozwalając działać tak, jak się uda, zaraz po dłuższym czasie. Nie mogę powiedzieć, czy w tym momencie coś robi. – user87843

5

Spróbuj "POKAŻ LISTĘ PROCESOWĄ", aby zobaczyć, co jest aktywne.

Oczywiście, jeśli go zabijesz, może zająć tyle samo czasu, aby go wycofać.

+0

Jest aktywny na liście procesów, w stanie "Wysyłanie danych". Liczba sekund, przez które była aktywna, stale wzrasta. Po prostu nie wiem, jak stwierdzić, czy faktycznie coś robi, czy nie. – user87843

+0

Czy zmieniają się rozmiary plików? Ponadto powinieneś zobaczyć pewien efekt w SHOW STATUS (w różnych zapisach i cachees). – dkretz

0

Biorąc pod uwagę to, co powiedziałeś, nie utknął. Jednak nie ma absolutnie żadnej gwarancji, że faktycznie zakończy się czymś, co przypomina rozsądny czas. Dodanie indeksów prawie na pewno pomoże, a w zależności od typu zapytania refaktoryzującego go na serię zapytań, które wykorzystują tabele tymczasowe, może dać ci ogromny wzrost wydajności. Nie sugerowałbym czekania, aż to się skończy.

1

Aby uzyskać lepszą wydajność bazy danych o takim rozmiarze, warto przyjrzeć się bazie danych opartej na dokumentach, takiej jak mongoDB. Zajmuje więcej miejsca na dysku twardym do przechowywania bazy danych, ale w zależności od aktualnego schematu, możesz uzyskać znacznie lepszą wydajność.