Wpis z mikrobloga

mam bazę danych ( #mysql ), i zapytanie:

update images set 'views'='400' where 'id'='9191'
czyli bardzo proste zapytanie. Raz wykonuje się 0,0025s - co jest normą, ale czasami wykonuje się 5s, czasami 30s, a w szczycie 120s.... co jest patologią. obciążenie systemu jest wtedy dosyć wysokie (load: 0: 2.72; 1: 1.51; 2: 1; )
tabela ta ma 14 pól, views jest zdefiniowane jako unsigned int(10) domyślnie 0, id jest również tak samo + primary key & unique & autoincrement.

Czy jest jakaś rzecz którą mogę sprawdzić? Bo ten update jest jedną z najbardziej problematycznych optymalizacyjnie rzeczy w wydajności mojej strony. A w mojej opinii jest to bardzo prosty i powinien być szybki kod.

#programowanie #bazydanych #mysql #php
  • 22
@brakloginuf: to jest tak jak tłumaczę dzieciom: rzeczą prostą jest rzecz którą wiesz, trudną której nie wiesz.
Tutaj jest bardzo podobnie, obstawiam, że może mi brakować jakiegoś przełącznika, albo np opóźnienia w zapisach na dysk, albo coś jeszcze innego prostego i to jest moim problemem.
obrazić mnie jest naprawdę trudno, w najgorszym wypadku uznam osobę która za dużo ciśnie za jełopa i zablokuję. Jestem za stary, miałem za dużo dyskusji z
@jagodowy_krol: Zrób sobie explain; na 99% coś innego Ci obciąża bazę w trakcie tego zapytania. I jeśli tam faktycznie jest unsigned int, to nie posyłaj tego id jako string i zamiast id = '9191' zrób id=9191 bo mysql będzie Ci wszystko castował przed porównaniem.
@jagodowy_krol: Jak wszystko śle jako stringi, to będziesz miał pełny skan tabeli za każdym razem bo inaczej Ci mysql nie porówna z kluczem. Jeśli absolutnie nie możesz zmienić tego zachowania to zbadaj indeksy funkcyjne. Ewentualnie jakieś triki w stylu where ID = 0 + '9191' - może zadziała.
rownie dobrze problem moze byc poza aplikacja bazodanowa, ale w srodowisku gdzie baza dziala i serwer musi poczekac na zasoby


@brakloginuf: No, jasna sprawa, w sumie założyłem implicite, że op to sprawdził. Trzeba by monitorować wszystkie statsy (szczególnie IOPS) w momencie kiedy występuje spike.

@jagodowy_krol: Ile masz tam wierszy w tej tabeli? [edit] - zauważyłem że 12k.
@brakloginuf: Diabli wiedzą, widziałem już różne cuda. Obstawiam, że OP co chwilę robi pełny skan tabeli, i uchodzi to płazem przy lekkim loadzie, ale kiedy dysk coś robi, to zapytanie czeka. Może nawet kilka ich idzie, i jakieś locki jeszcze wpadają.