Jak interpretować „czas blokady” w dzienniku powolnych zapytań mysql?

12

Próbuję zrozumieć, jak najlepiej zinterpretować czas blokowania dla zapytań wyświetlanych w naszym dzienniku wolnych zapytań MySQL.

Na przykład, jeśli zapytanie UPDATE ma 10 sekundowy czas blokady. Zakładam, że jest to całkowity czas po uzyskaniu blokady przez zapytanie o aktualizację. Nawet jeśli czeka na zakończenie poprzednich zapytań o wybranie, ale nie wykonuje samej akcji UPDATE, zegar powinien tykać, ponieważ blokuje wszystkie zapytania SELECT, które zostały ustawione po zapytaniu UPDATE.

A co z blokadami zapytania SELECT. Dlaczego niektóre wybrane zapytania mają czasy blokady? Czy dlatego, że następuje zapytanie UPDATE, dlatego blokują one tabelę razem.

Haluk
źródło

Odpowiedzi:

19

W lock_timedzienniku powolnych zapytań jest w rzeczywistości ilość czasu, jaką zapytanie spędziło na uzyskaniu blokady potrzebnej do uruchomienia. Na przykład UPDATESzapytania wymagają blokady zapisu.

Blokowanie zależy również od silnika pamięci, którego używasz w tabeli. Podczas pisania InnoDB użyje blokowania na poziomie wiersza i zablokuje tylko zmieniane wiersze. MyISAM zablokuje całą tabelę do momentu zakończenia aktualizacji / wstawiania / usuwania.

Blokowanie całej tabeli dla MyISAM jest dużym powodem, dla którego SELECTzapytania będą miały czas blokady w twoim dzienniku powolnych zapytań.

Derek Downey
źródło