IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

Gérer des requêtes lourdes avec Wamp


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 354
    Points : 410
    Points
    410
    Par défaut Gérer des requêtes lourdes avec Wamp
    Bonjour et bonne année,

    j'ai des requêtes lourdes qui ne s'affichent plus depuis plus d'un an sur lesquelles je m'étais fait une raison, avec la page d'erreur 500.

    J'ai déjà optimisé à fond, mais le problème est le volume d'une table en BDD, 200 mille enregistrements d'une vingtaine de champs. C'est pas beaucoup pourtant quand je vois d'autres volumes de 500 mille voir plus dans d'autres sujets.

    En tout cas moi ça passe plus. Et donc je voudrais savoir, quel paramètre on peut changer dans les fichiers de conf, comme le my.ini, pour augmenter les capacités de gestion de requêtes?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    avant d'aller tripatouiller la configuration, je t'invite à poser des index sur les colonnes des tables utilisées dans les requêtes.
    Parce que 200 000 enregistrements sur 20 colonnes c'est vraiment rien mais alors rien du tout pour un moteur de base de données.

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faudrait déjà connaitre la vraie erreur qui se produit : "500" est une erreur générique affichée par le serveur web.
    Consulte tes logs PHP.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 354
    Points : 410
    Points
    410
    Par défaut
    merci et désolé de répondre tardivement, je ne pensais pas avoir de réponses si rapides,

    je n'ai rien dans mon fichier de logs,

    en fait j'ai certes que 200 000 enregistrements, j'ai déjà des index, mais pour ma requête, je n'ai pas de condition where, " j'affiche tout ", plus précisément, je dois récupérer l'ensemble de mes enregistrements, des calculs sont faits, puis tout est synthétisé, mais je dois tout récupérer. Et ça ne lui plait pas la récupération d'environ 200 mille enregistrements. Existe-t-il un moyen d'optimiser à ce niveau?

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il est quand même très probable que tu atteignes une limite de temps d'execution ou de mémoire et donc il doit y avoir une erreur PHP.
    Donc soit ton serveur ni ne log, ni n'affiche les erreurs, soit tu ne regardes pas le bon log.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 354
    Points : 410
    Points
    410
    Par défaut
    les logs que je prends sont dans la console, ou bien directement sur wamp/logs/

    rien à la date et heure d'exécution du script pour le php_error.log, ni pour le apache_error.log, et sur le access.log j'ai ceci (synthétisé) :

    ::1 - - [11/Jan/2016:13:00:14 +0100] "GET /mywebsite/ HTTP/1.1" 200 1132

    [ css, jpg, js, ... ]

    ::1 - - [11/Jan/2016:13:00:14 +0100] "GET /favicon.ico HTTP/1.1" 200 202575
    ::1 - - [11/Jan/2016:13:00:16 +0100] "POST /mywebsite/ HTTP/1.1" 500 -

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut

    Tu peux poster ton script de stats parce-qu'à priori j'aurais tendance à suivre la position du sieur sabotage quand il dit qu'il y a peut-être un problème dans le script.

  8. #8
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    J'aurai tendance à vérifier la valeur du timeout serveur.
    Celle-ci peut-être modifier / via la commande suivante :
    http://php.net/manual/fr/function.set-time-limit.php

    De même que la valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Affichage du temps maximal d'exécution
    echo ini_get('max_execution_time');
     
    ini_set('max_execution_time', 300); //300 seconds = 5 minutes
    ini_set('max_execution_time', 0); //0=NOLIMIT
    Attention, il ne faut pas utiliser du "no limit" de manière systématique. Au risque de surcharger le serveur sur des requêtes qui aurait du s'arrêter.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  9. #9
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 354
    Points : 410
    Points
    410
    Par défaut
    Hélas toujours pas, ça reste en suspend, j'ouvre une petite parenthèse concernant les index pour d'autres requêtes, y a t il moyen de les faire fonctionner avec la clause like dont les premiers caractères sont inconnus? Par exemple si champ1 est en index, et que j'ai une requête de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select * from matable where champ1 like '%test%'; #fonctionne pas
    select * from matable where champ1 like '%test'; #fonctionne pas
    select * from matable where champ1 like 'test%'; #fonctionne
    J'ai mis fonctionne / fonctionne pas en utilisant le explain devant la requête.

  10. #10
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Pour ton problème principale, essai de forcer l’arrêter/retour de la part du serveur (Violemment si besoin pour debugger). Peut-être que tu peux fractionné ton traitement, où réaliser celui-ci en asynchrone.

    Pour ta question annexe, cela est totalement normale. Tu peux lire cette article par rapport à ce sujet :
    Indexer les filtres LIKE
    En résumé, cela est dû à la structure des index, ceux-ci sont globalement des liste triées. Si ton caractère inconnu est en première position, alors l'index n'est pas efficace. Car la base de données ne peux pas profité du trie pour facilité la recherche.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  11. #11
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 354
    Points : 410
    Points
    410
    Par défaut
    je vais étudier la question, merci pour vos réponses

Discussions similaires

  1. Gérer des attributs "value" avec Javascript
    Par Jarodd dans le forum Général JavaScript
    Réponses: 40
    Dernier message: 14/11/2008, 12h44
  2. Gérer des déploiement différents avec Maven.
    Par martopioche dans le forum Maven
    Réponses: 5
    Dernier message: 02/10/2007, 12h28
  3. Comment gérer des sous ensembles avec des "enum" ?
    Par ogattaz dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2007, 10h29
  4. Réponses: 3
    Dernier message: 16/12/2006, 12h59
  5. Modifier des requêtes Access avec VBA
    Par vuong1 dans le forum Access
    Réponses: 7
    Dernier message: 02/08/2006, 07h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo