cafepl_com
25.04.2011, 19:48:06
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
25.04.2011, 20:32:47
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
25.04.2011, 20:41:51
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
25.04.2011, 21:06:32
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.htmlhttp://php.net/manual/en/pdo.prepare.phphttp://serverfault.com/questions/7630/what...ed-improvementsmożna też użyć KCacheGrind / WinCacheGrind -->
http://www.xdebug.org/docs/profilerCzy 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