Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Długo trwające, pierwsze zapytania SQL
Forum PHP.pl > Forum > Bazy danych
cafepl_com
Witam,

mam pytanie odnośnie zapytań SQL.
Otóż aktualnie testuję moją aplikację pod względem wydajności i w tym celu używam xdebuggera.
No i przy pierwszym uruchomieniu aplikacji, tuż po włączeniu serwera, okazało się, że zapytania SQL + połączenie z bazą długo trwają.
Np. łączenie z bazą po raz pierwszy trwa ok. 0.05 s., a kolejne zapytanie SQL ok. 0.07 s. Po odświeżeniu aplikacji, łączenie z bazą trwa już 0.003 s., a zapytanie ok. 0.005 s. W rezultacie mam mieszane odczucia, gdyż normalnie (podczas intensywnego testowania) aplikacja ładuje się w 0.01 s., a uruchomiona po raz pierwszy 0.15 s.

Czym może to być spowodowane? Czy należy to uznawać za błąd, czy też nie przejmować się i brać pod uwagę czas generowania aplikacji po np. 3 uruchomieniu?
darko
Za mało wiemy, żeby coś podpowiedzieć. Nie wiemy:
- jak łączysz się z bazą mysql_query, PDO ?
- jakie masz zapytania i czy są optymalnie napisane ?
- jaką masz konfigurację serwera
- czy używasz jakiegoś mechanizmu cacheowania np. apc?
- jaką masz wersję mysql?
- i php ?
Jedyna co można sensownego Ci odpisać w tym momencie, to fakt, że przy pierwszym uruchomieniu, gdy nie ma jeszcze żadnych zapytań cacheowanych prawie zawsze będzie trwać dłużej rozruch aplikacji. Moim zdaniem to normalne. Takie testy powinno się robić przy pewnym obciążeniu, natężeniu ruchu, a nie tuż po uruchomieniu serwera, gdyż nigdy nie otrzymasz obiektywnych wyników takiego testu.
cafepl_com
Dziękuję za odpowiedź.

- łączę się przez mysql_pconnect()
- zapytania nie są skomplikowane, napisałem je najoptymalniej, jak się dało
- nie używam mechanizów cache'owania za wyjątkiem własnego, napisanego przez siebie (cache'uje rezultaty zapytania sql w menu aplikacji)
- PHP 5.3.5
- mysql 5
darko
Robiąc wydajnościowe testy na pewno powinno się zestawić średnią z kilkunastu jeśli nawet nie kilkuset takich uruchomień. W tym momencie mogę jedynie zasugerować, żeby - jeśli jest dużo danych wyciąganych - zastosować preparowanie zapytań w PDO (Zapytania preinterpretowane). Odpowiednie wykorzystanie PDO na pewno nieco przyspieszy ogólne działanie aplikacji. Ponadto:
http://dev.mysql.com/doc/refman/5.1/en/query-cache.html
http://php.net/manual/en/pdo.prepare.php
http://serverfault.com/questions/7630/what...ed-improvements
można też użyć KCacheGrind / WinCacheGrind --> http://www.xdebug.org/docs/profiler
Czy korzystasz z jakiegoś systemu szablonów? Jak wyglądają Twoje zapytania oraz jaki jest Twój system cacheowania <-- odpowiedzi na te pytania również mają wpływ na wydajność Twojej aplikacji. Poza tym tutaj:
http://www.techiecorner.com/45/turn-on-mys...ry-performance/
nieco konfiguracyjnych kwestii przyspieszających mysqla. Jeśli chodzi o serwer apache i php, to na pewno poprawnie skonfigurowany mod_deflate oraz np. apc lub którykolwiek z tej listy
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.