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

PHP & Base de données Discussion :

Lenteurs requêtes suite migration


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de arcane
    Inscrit en
    Avril 2003
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 313
    Par défaut Lenteurs requêtes suite migration
    Bonjour,
    Je migre un serveur avec un apache 2.2 et php 5.3 vers un serveur apache 2.4 et php 8.
    Je dois modifier tous mes scripts par rapport à des fonctions php obsolètes.
    Ces 2 serveurs tapent sur la même base SQL (située sur un 3eme serveur).
    Sans modifier les requêtes, elles sont très lentes sur le nouveau serveur apache alors qu'elles sont instantanées sur l'ancien serveur (avec les anciennes fonctions php)
    Ce sont des requêtes qui renvoient quelques dizaines de lignes pour la plupart, pas de raison d'avoir des lenteurs.

    Je ne sais pas trop dans quel sens chercher, ni ce qu'il faut mettre en cause : la librairie sql server dans php ? le paramétrage apache ?
    Pourriez-vous me donner des pistes ?
    Merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Citation Envoyé par arcane Voir le message
    Ce sont des requêtes qui renvoient quelques dizaines de lignes pour la plupart, pas de raison d'avoir des lenteurs.
    Une requête peut être extrêmement lourde et renvoyer zéro enregistrements à la fin, du fait des critères de sélection

    Pour qu'on soit sur la même page, vous êtes sûr que le problème vient de l'accès à la DB ? Par exemple, j'éditerais le script pour commenter les parties qui utilisent la DB, et puis on recharge la page pour voir si ça fait une différence notable ou pas.
    Ou plus simple encore, saupoudrer le code de echo, pour afficher le time écoulé au fur et à mesure de l'exécution du code.
    Car on peut imaginer que c'est Apache qui est lent à servir les pages.

  3. #3
    Membre éclairé Avatar de arcane
    Inscrit en
    Avril 2003
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 313
    Par défaut
    Citation Envoyé par binarygirl Voir le message
    Une requête peut être extrêmement lourde et renvoyer zéro enregistrements à la fin, du fait des critères de sélection
    Pas dans mon cas : une requête strictement identique s'exécute parfaitement en direct (avec le SQL manager), et également sur l'ancien serveur (apache 2.2 avec php 5.3). Il n'y a que sur le nouveau serveur que c'est lent.
    Et c'est flagrant : même pas une seconde dans ces 2 premiers cas contre plusieurs secondes sur le nouveau serveur.

    Quand il n'y a pas d'interrogation SQL, je ne constate pas de lenteurs particulières (en même temps, les scripts sans SQL ne contiennent pas grand chose.)

    Je cible une page :
    45 secondes (instantanée sur l'ancien)
    J'ai testé un script en commentant l'affichage de la requête (mais j'exécute la requête) : instantané.
    Effectivement, je commence à cibler le problème sur la boucle d'interrogation des données.

    J'ai transformé un ancien code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $requete_fourn_gen = "SELECT CODE, LIBELLE FROM FOURN_GEN ORDER BY CODE;";
    $resultat_requete_fourn_gen = mssql_query ($requete_fourn_gen);
    if (!$resultat_requete_fourn_gen)
       { erreur_requete_mssql ($conn_mssql,__FILE__);};
     
    $nblignes_lister_fourn_gen=mssql_num_rows($resultat_requete_fourn_gen);
    echo "    <select name=\"code\"  size= \"1\">\n";
    if ($nblignes_lister_fourn_gen) {
       for ($i_cmp=0; $i_cmp<$nblignes_lister_fourn_gen; $i_cmp++)
           {
             $code = mssql_result ($resultat_requete_fourn_gen ,$i_cmp,"CODE");
             $libelle = mssql_result ($resultat_requete_fourn_gen ,$i_cmp,"LIBELLE");
     
             echo "       <option value=\"$code\"> $code - $libelle </option>\n";
           };
       };
    echo "     </select>\n";
    En nouveau code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    $requete_fourn_gen = "SELECT CODE, LIBELLE FROM FOURN_GEN ORDER BY CODE;";
    $resultat_requete_fourn_gen = sqlsrv_query ($conn_mssql, $requete_fourn_gen, $params_query, $options_query);
    if (!$resultat_requete_fourn_gen)
    { echo "ERREUR <br /> ";erreur_requete_mssql ($conn_mssql,__FILE__);};
     
    $nblignes_lister_fourn_gen=sqlsrv_num_rows($resultat_requete_fourn_gen);
    echo "    <select name=\"code\"  size= \"1\">\n";
    if ($nblignes_lister_fourn_gen) {
       for ($i_cmp=0; $i_cmp<$nblignes_lister_fourn_gen; $i_cmp++)
           {
             /* Make the first row of the result set available for reading. */ 
             mise_a_dispo_sqlsrv ($resultat_requete_fourn_gen );
             $code = sqlsrv_get_field ($resultat_requete_fourn_gen ,0);
             $libelle = sqlsrv_get_field ($resultat_requete_fourn_gen ,1);
     
             echo "       <option value=\"$code\"> $code - $libelle </option>\n";
           };
       };
    echo "     </select>\n";
    avec la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function mise_a_dispo_sqlsrv ($resultat_requete)
    {
      if( sqlsrv_fetch( $resultat_requete ) === false)
      {  
    	echo "Error in retrieving row.\n";  
    	die( print_r( sqlsrv_errors(), true));  
      };
    };
    Je ne vois pas ce qui est "tordu" dans ce code ?
    Merci

  4. #4
    Membre éclairé Avatar de arcane
    Inscrit en
    Avril 2003
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 313
    Par défaut
    Pour info, pour passer de 45 secondes à 0, j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $requete_fourn_gen = "SELECT CODE, LIBELLE FROM FOURN_GEN ORDER BY CODE;";
    $resultat_requete_fourn_gen = sqlsrv_query ($conn_mssql, $requete_fourn_gen, $params_query, $options_query);
    if (!$resultat_requete_fourn_gen)
    { echo "ERREUR <br /> ";erreur_requete_mssql ($conn_mssql,__FILE__);};
     
    $nblignes_lister_fourn_gen=sqlsrv_num_rows($resultat_requete_fourn_gen);
     
    echo "    <select name=\"code\"  size= \"1\">\n";
    /*
    if ($nblignes_lister_fourn_gen) {
       for ($i_cmp=0; $i_cmp<$nblignes_lister_fourn_gen; $i_cmp++)
           {
             // Make the first row of the result set available for reading. 
             mise_a_dispo_sqlsrv ($resultat_requete_fourn_gen );
             $code = sqlsrv_get_field ($resultat_requete_fourn_gen ,0);
             $libelle = sqlsrv_get_field ($resultat_requete_fourn_gen ,1);
     
             echo "       <option value=\"$code\"> $code - $libelle </option>\n";
           };
       };*/
    echo "     </select>\n";

  5. #5
    Nb
    Nb est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 163
    Par défaut
    Une fois que tu aras fait les tests proposés par bg et si c est bien les parties relatives à la bd qui posent soucis, tu prends tes requetes et tu les executent en direct sur le serveur de bd. Si pas de soucis là y a deux possibilités : soit la librairie pour l acces aux bases est pourrie (peu probable si tu utilises l une de celles fournies par php) soit tu as un probleme de liaison entre le serveur apache et celui de bd et là y aura d autres trucs à verifier.

Discussions similaires

  1. [WD20] Lenteur requête après migration de windev 18 à 20
    Par law56100 dans le forum WinDev
    Réponses: 2
    Dernier message: 09/07/2015, 11h44
  2. [AC-2003] Lenteur Requête suite à compactage
    Par charliejo dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 18/05/2012, 14h18
  3. Lenteur à la connexion suite migration Oracle 10g1 vers 10g2
    Par dvdavid2009 dans le forum Connexions aux bases de données
    Réponses: 4
    Dernier message: 28/01/2010, 17h29
  4. Réponses: 3
    Dernier message: 20/06/2007, 18h42
  5. Pb de select suite à migration d'oracle 8i vers 10G2
    Par childeric dans le forum Oracle
    Réponses: 6
    Dernier message: 19/01/2006, 12h52

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