Któreś z kolei zapytanie jest strasznie wolne - mariadb |
Któreś z kolei zapytanie jest strasznie wolne - mariadb |
12.07.2020, 13:36:33
Post
#1
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 7 Dołączył: 6.09.2011 Skąd: Olsztyn Ostrzeżenie: (0%) |
Witam wszystkich,
Ostatnio musiałem uruchomić proces, który: a) wyszuka rekordy z tabeli (z jakimiś joinami) zrobi coś z tymi danymi c) zaktualizuje te rekordy w tabeli No i chodziło to na jednym procesie ale całość była niewydajna. W związku z tym rozdzieliłem wszystko na wiele podprocesów i zauważyłem dziwną anomalię... Wszystkich procesów uruchamiam np. 30 i wszystkie wykonują się dość szybko - czas to od 0.02 do maks 0.2 sekundy. Jednak w pewnym momencie dochodzi do dziwnej sytuacji, a mianowicie jedno zapytanie (wszystkie są takie same) się przywiesza i trwa około 107 sekund. 4 inne trwają po 28 sekund. I nagle zapytania te odpuszczają (zwracają 0 rekordów, co jest rzeczą normalną). Reszta zapytań wykonuje się dość szybko. Czy spotkał się ktoś z taką sytuacją lub wie, co może być przyczyną takiego zachowania? -------------------- Pomogłem? Kliknij "Pomógł".
|
|
|
12.07.2020, 13:50:08
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Deadlocki?
-------------------- |
|
|
12.07.2020, 14:11:22
Post
#3
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 7 Dołączył: 6.09.2011 Skąd: Olsztyn Ostrzeżenie: (0%) |
Czy w tym momencie baza rzuciłaby jakimś błędem? Bo ja żadnego wyjątku nie dostaję. Poza tym wyciągając selectem dane dodaję warunek, który eliminuje możliwość działania dwóch procesów na tym samym rekordzie.
Ten post edytował Valantir 12.07.2020, 14:45:59 -------------------- Pomogłem? Kliknij "Pomógł".
|
|
|
12.07.2020, 15:01:11
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
To jest tabela InnoDB?
Zapytanie ma jakieś podselect? -------------------- |
|
|
12.07.2020, 15:40:50
Post
#5
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 7 Dołączył: 6.09.2011 Skąd: Olsztyn Ostrzeżenie: (0%) |
Tak, InnoDB. I tak, ma jeden podselect.
-------------------- Pomogłem? Kliknij "Pomógł".
|
|
|
12.07.2020, 15:47:21
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Ten podselect w update i dotyczy samej tabeli co nadrzędny update?
-------------------- |
|
|
12.07.2020, 16:10:16
Post
#7
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 7 Dołączył: 6.09.2011 Skąd: Olsztyn Ostrzeżenie: (0%) |
Problemy są z samym selectem.
Leci coś w stylu: select x, y, z from (subselect z wherem i limitem) as t1 join t2 join t3 join t4 where x = 'test' update potem leci ok -------------------- Pomogłem? Kliknij "Pomógł".
|
|
|
12.07.2020, 16:35:51
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
A indeksy są pozakładane?
-------------------- |
|
|
13.07.2020, 20:25:21
Post
#9
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 7 Dołączył: 6.09.2011 Skąd: Olsztyn Ostrzeżenie: (0%) |
Tak, indeksy są pozakładane - dlatego pierwsze zapytanie wykonuje się nawet w 0.02 sekundy. Razem jest uruchamianych około 27 procesów, z czego 23 lecą dość szybko (po wykonaniu selecta zapytanie zwraca 0 rekordów), a 4 wiszą - 3 z nich po około 70-80 sekundach się wykonuje, a czwarte po około 1300 sekundach...
Ten post edytował Valantir 13.07.2020, 20:25:38 -------------------- Pomogłem? Kliknij "Pomógł".
|
|
|
14.07.2020, 10:15:09
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Pokaż wynik EXPLAIN SELECT ... jednego z tych wolnych zapytań.
Kiedy wykonujesz je "samodzielnie", to działa szybko? -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 15:20 |