Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [kohana] mysql has gone away
nmts
post
Post #1





Grupa: Zarejestrowani
Postów: 283
Pomógł: 34
Dołączył: 21.03.2008

Ostrzeżenie: (0%)
-----


Pracując dzisiaj z KO3 napotkałem błąd jak w tytule, który powodował moduł Auth. Wylogowanie (usunięcie ciastek), i ponowne zalogowanie pomogło. Problem powraca (trudno określić kiedy), mogę w późniejszym czasie przeprowadzić głębszą analizę Auth, ale może ktoś mi jej oszczędzi. (IMG:style_emoticons/default/winksmiley.jpg)

  1. ERROR: ErrorException [ 2 ]: mysql_query() [function.mysql-query]: MySQL server has gone away ~ MODPATH/database/classes/kohana/database/mysql.php [ 171 ]


Coś jednak Auth nie jest głównym winowajcą, bo jakieś powołanie instancji session z Auth robi problem... problem zdarza się w różnych sytuacjach, np. usuwam rekord, a następnia muli, muli i po bardzo długim (to akurat wina długiego timeouta) czasie mysql has gone away.

Przykładowo zarejestrowałem użytkownika, pokazało strone - potwierdzenie, po czym przejście na stronę główną już jest nie możliwe bo coś muli - nie mam pojęcia jak sprawdzić co, analizowanie bebechów Kohany średnio mi się podoba. (IMG:style_emoticons/default/sad.gif)

Przykładowo wynik z Kohany po zarejestrowaniu (z sytuacji powyżej):
http://img510.imageshack.us/img510/3495/profilerr.jpg

Przetestowałem bazę na innym serwerze to admin stwierdził, że mu takie zapytanie bazę blokuje: (wtf w ogóle, skąd niby takie zap. miałoby blokować bazę)

  1. SELECT (SELECT COUNT(objects.id) FROM objects WHERE cities.id = objects.city_id) AS `objects_count`, `cities`.* FROM `objects`, `cities` GROUP BY `cities`.`id` ORDER BY `objects_count` DESC LIMIT 20 (1)


Ten post edytował nmts 17.01.2011, 12:39:00
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
kalmaceta
post
Post #2





Grupa: Zarejestrowani
Postów: 183
Pomógł: 24
Dołączył: 4.12.2010

Ostrzeżenie: (0%)
-----


po co te podzapytanie w jest w tym zapytaniu
Go to the top of the page
+Quote Post
thek
post
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Nie patrzyłem czemu, ale dla mnie zapytanie jest mega niewydajne. Weź tabelę obiektów, złącz ją z cities, pogrupuj i voila. O ile rozumiem CO chcesz tym zapytaniem zrobić (IMG:style_emoticons/default/smile.gif)
Coś jak :
  1. SELECT c.*, count(o.id) AS liczba FROM objects AS o LEFT JOIN cities AS c ON c.id = o.city_id GROUP BY c.id ORDER BY liczba DESC LIMIT 20


A bazka się sypie bo masz iloczyn kartezjański tych tabel... Wszystkie kombinacje możliwe między cities i objects (taki jest efekt wymieniania tabel po przecinku) i jeszcze podzapytaniem wewnętrznym poganiane (IMG:style_emoticons/default/winksmiley.jpg) Masz więc ostre pojechanie po bazie i się dziwisz, że zdechła? Niech w każdej ma choćby po 1000 rekordów to summa sumarum wychodzi Ci 1000000 kombinacji a do tego jeszcze podzapytanie nieskorelowane (IMG:style_emoticons/default/winksmiley.jpg) To i blokuje bazka się bo nie zdoła szybko tego przerobić.
Powód edycji: [thek]:
Go to the top of the page
+Quote Post
nmts
post
Post #4





Grupa: Zarejestrowani
Postów: 283
Pomógł: 34
Dołączył: 21.03.2008

Ostrzeżenie: (0%)
-----


Wygląda na to, że jednak to zapytanie było problemem, choć z początku wydawało mi się to nie możliwe bo nie za każdym razem wywalało bazę. Cóż, sql u mnie jeszcze kuleje. (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
thek
post
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Przy takich zapytaniach licho wie ile czasu to zajmuje i kiedy może wywalić bazę. Wymienianie tabel po przecinku jest najgorszym możliwym wydajnościowo typem złączenia (każdy z każdym) i należy go unikać za wszelką cenę jeśli to tylko możliwe. Jeśli do tego dorzucasz podzapytania nieskorelowane to masz bombę z opóźnionym zapłonem. Ale że to jest SELECT to normalnie możesz nie zauważyć kiedy to się dzieje, bo SELECTy nie blokują tabel czy wierszy (zależy od silnika) jak INSERT czy UPDATE. Robić się może więc wiele gdzieś w tle i w trakcie działania aplikacji, ni stąd, ni zowąd, nagle kończą się zasoby lub następuje jakaś operacja blokująca i baza wyciąga kopyta na innej, niewinnej, operacji. Tak jak w przysłowiu: "Kowal zawinił, cygana powiesili" (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 29.12.2025 - 15:30