propage
11.05.2013, 11:21:17
jest skrypt aktualizacji bazy danych, który wykonuje ok 0.5 mln zapytań do bazy danych i działa tak przez 5 minut, uruchmiany jest raz na 2 godziny.
W czasie, gdy pracuje, cały serwer zwalnia.
Zastanawiam się, czy da się go wykonać np. w 15 minut, tak aby w tym czasie wykorzystywał mniej zasobów, aby serwer tego nie odczuł tak bardzo?
Wazniak96
11.05.2013, 12:56:57
Skrypt połączony jest z MySQL przez PDO? Jeżeli nie to przenieś sie na PDO i użyj prepare z bindValue
Może co kilkaset zapytań zrób
sleep?
Fifi209
11.05.2013, 13:58:10
Pytanie co robi ten skrypt w ogóle
propage
11.05.2013, 14:43:22
1. co da PDO ? To szybciej działa niż zwykłe zapytania przez mysql_query ? Raczej nie wchodzi to w gre, za dużo przepisywania.
2. Skrypt aktualizjuje baze produktów w sklepie internetowym ok 20 tys produktów łacznie z różnymi cechami itd...
3. te "sleep" nie wiem czy to dobry pomysł, ktoś testował?
Wazniak96
11.05.2013, 14:51:28
Pewnie, że szybsze... wysyłasz jedno zapytanie zamiast tych pół miliona, ale nie wiem czy tyle PDO by wgl przyjęło.
Cytat(propage @ 11.05.2013, 15:43:22 )

1. co da PDO ? To szybciej działa niż zwykłe zapytania przez mysql_query ? Raczej nie wchodzi to w gre, za dużo przepisywania.
Twierdzą że szybsze.
Cytat(propage @ 11.05.2013, 15:43:22 )

2. Skrypt aktualizjuje baze produktów w sklepie internetowym ok 20 tys produktów łacznie z różnymi cechami itd...
Nie mając kodu, trudno powiedzieć co można z tym zrobić. Wszytko zależy od tego jak całość jest napisany i czy da się to zoptymalizować z poziomu php.
Cytat(propage @ 11.05.2013, 15:43:22 )

3. te "sleep" nie wiem czy to dobry pomysł, ktoś testował?
Też go nie rozumiem.
propage
11.05.2013, 15:55:35
nie chce zakładać nowego tematu, mam pytanie, czy apostrofy w zapytaniach spowalniają działenie zapytania np WHERE id = '9' w stosunku WHERE id = 9 ?
Fifi209
15.05.2013, 10:07:46
Naturalnie, że tak. Bo trzeba rzutować stringa na liczbę.
Kocurro
16.05.2013, 09:57:39
Po kolei:
1) skorzystaj z mysqltunner
2) włącz slow_query_log
3) przejrzyj slow_query_log
4) zaprzyjaźniej się z EXPLAIN
5) popraw strukturę bazy danych
6) popraw zapytanie aktualizujące
7) wyłącz slow_query_log
8) odczekaj minimum 24h
9) użyj mysqltunner
Jeśli to nie da rady - przemyśl założenia algorytmu aktualizacji.
Jeśli nie dasz rady - zleć specjaliście.
Pozdrawiam,
Łukasz
Andrzej.W.
17.05.2013, 12:47:40
Hmm może to głupie pytanie. Ale gdzie jest przechowywana taka ilość danych zanim zostanie wprowadzona do bazy i skąd one pochodzą?
nospor
17.05.2013, 12:54:50
500tys zapytań do bazy naraz.... nic dziwnego że ci zamula serwer w tym czasie. Tu żadne apostrofy ci nie pomogą. Problemem jest liczba zapytań.
Sam przetwarzam duże dane i by serwer pracował w tym czasie używam właśnie sleep(1) co kilkaset rekordów. Ino u mnie nie musi się to wykynać w 15 minut więc nie ma problemu że potrwa to dłużej - grunt że serwer nie muli.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.