Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] mocno obciążający serwr skrypt
Forum PHP.pl > Forum > PHP
propage
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
Skrypt połączony jest z MySQL przez PDO? Jeżeli nie to przenieś sie na PDO i użyj prepare z bindValue smile.gif
Aqu
Może co kilkaset zapytań zrób sleep?
Fifi209
Pytanie co robi ten skrypt w ogóle smile.gif
propage
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
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
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
Naturalnie, że tak. Bo trzeba rzutować stringa na liczbę.
Kocurro
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.
Hmm może to głupie pytanie. Ale gdzie jest przechowywana taka ilość danych zanim zostanie wprowadzona do bazy i skąd one pochodzą? smile.gif
nospor
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.