2013-09-26 2 views
1

J'ai un serveur web local EasyPHP avec Apache, PHP et MySQL. Jusqu'à présent, j'ai travaillé avec une base de données qui a seulement 500 enregistrements. Parfois, lors de l'interrogation de la base de données, il y aurait un gros retard, peut-être environ 10 secondes, avant que les données ne soient renvoyées, mais elles n'étaient pas cohérentes. Peut-être que chaque 10e recherche d'utilisateur se produirait. Aujourd'hui, j'ai chargé un tas de données de test dans 6 tableaux. Chaque table a maintenant environ 15 000 enregistrements. Maintenant, lors de la recherche d'utilisateurs, il faut environ 25 secondes pour que les données soient retournées et se produisent à chaque fois.Requête SQL extrêmement lente dans l'application web Kohana sur le serveur EasyPHP win7

Voici la requête SELECT:

SELECT SQL_CALC_FOUND_ROWS criteria.id, criteria.uid 
FROM user_profile 
INNER JOIN criteria ON (criteria.id = user_profile.cid) 
WHERE ((criteria.city = 250) 
    AND (user_profile.dob BETWEEN STR_TO_DATE('1978-09-27', '%Y-%m-%d') 
    AND STR_TO_DATE('1993-09-27', '%Y-%m-%d')) 
    AND (criteria.gender = 2) 
    AND (EXISTS(SELECT id FROM criteria_interests 
       WHERE cid = user_profile.cid AND value = 1) 
     OR EXISTS(SELECT id FROM criteria_interests 
       WHERE cid = user_profile.cid AND value = 2))) 
    AND (user_profile.uid != 2) 
LIMIT 0, 18 

Cette requête prend environ 25 secondes pour revenir 202 résultats. Si j'exécute cette requête dans phpMyAdmin, elle se charge instantanément.

Je ne sais pas où est la retenue. Je sais que SQL_CALC_FOUND_ROWS peut parfois provoquer des ralentissements, mais pas 25 secondes pour retourner 202 lignes. Quelque chose cloche ici. Je me demande comment je peux localiser le problème. Le retard intermittent dont j'ai parlé le premier est arrivé essentiellement depuis que j'ai installé EasyPHP, donc j'ai pensé que c'était un problème avec EasyPHP. Mais maintenant, voyant à quel point le problème s'est aggravé avec plus d'enregistrements de base de données, j'ai pensé que c'était un problème de MySQL. Cependant, lorsque j'exécute la requête dans phpMyAdmin, c'est très rapide. Donc maintenant je pense que c'est un problème PHP.

Ma limite de mémoire PHP est fixée à 128M, ce qui pourrait ne pas être beaucoup, mais cela ne causerait pas un délai de 25 secondes.

Est-ce que quelqu'un sait comment je pourrais résoudre ce problème? Je ne suis pas le plus compétent quand il s'agit de configurer Apache, PHP ou MySQL, donc je ne suis pas sûr de savoir comment s'y prendre.

Merci pour tout conseil.

+3

Avez-vous essayé le [Kohana profiler] (http://kohanaframework.org/3.3/guide/kohana/profiling). Cela permettra au moins d'identifier si vous cherchez au bon endroit. Assurez-vous également que vous avez correctement spécifié vos index dans MySQL et envisagez d'activer le [journal de requête lente Mysql] (http://dev.mysql.com/doc/refman/5.1/fr/slow-query-log.html). –

+0

Je ne connaissais pas le profiler! Cela m'a conduit directement à la question de problème, qui était en fait la sélection COUNT() juste après la sélection des résultats de recherche. Merci pour ça. Cela a essentiellement répondu à ma question, donc si vous mettez cela dans une réponse, je la marquerai comme acceptée. – Gavin

Répondre

1

J'ai eu un problème similaire avec le chargement de la base de données. Il fonctionne extrêmement lentement sur mon environnement local EasyPHP. Cependant, lorsque je l'ai téléchargé sur le serveur d'hébergement à distance, le problème était déjà disparu. Donc, si votre EasyPHP exécute votre application lentement, ne vous inquiétez pas trop, cela fonctionnera bien sur le vrai serveur.

Si vous ne pouvez vraiment pas gérer ce lag wile, développez localement l'environnement XAMPP à la place. Lien de téléchargement: http://www.apachefriends.org/en/xampp.html

0

Je pense avoir trouvé une solution à votre problème. Cela pourrait ne pas résoudre le problème particulier, mais il pourrait le résoudre de toute façon. Votre question m'a fait penser que puis-je faire pour résoudre ce problème ... et cela peut sembler plutôt mal à l'aise, mais je fixe en installant le serveur WAMP:

http://www.wampserver.com/en/

Maintenant, vous dites probablement .. "Hey vous avez dit que vous l'avez réparé ne pas changer le serveur de développement"

Et oui! Une fois que je l'ai installé WAMP serveur et après avoir appliqué à au-dessus de la configuration de MySQL montré sur la vidéo youtube:

http://www.youtube.com/watch?v=8ob7Rvzobec&noredirect=1

mon EasyPHP a obtenu un coup de pouce de massif vitesse! Maintenant, cela fonctionne comme un charme. La requête de la base de données est rapide comme l'enfer.Et à partir de cet endroit, je voudrais vous rappeler que j'ai fait exactement face à la même question que la vôtre. Maintenant, le problème est résolu et mon EasyPHP peut encore briller.

Peut-être que cela résoudra aussi votre problème. Bonne chance! :)

Questions connexes