Bonsoir,
Le 03/04/2012 16:59, Informatique Lycée Francois 1er a écrit :
Il y a quelques temps, j'ai posté un message concernant un problème de
lenteur lorsque l'on voulait visualiser la fiche de résumé d'un élève
(Consultation d'un élève -> Choix d'une classe -> Choix d'un élève).
J'ai depuis fait quelques recherches et pas mal de tests, et j'ai
finalement trouvé le fond du problème. Pour rappeler la configuration de
notre serveur GEPI, nous tournons chez OVH, et voici le résultat de la
page de test du serveur :
Les données de base de votre serveur web :
Le register_globals est à paramètre inconnu.
Le serveur web est Apache/2.2.X (OVH)
Encodage inconnu -> encodage par défaut : inconnu.
Votre version de php est la 5.2.17 (Gepi nécessite php 5.2.x minimum).
Votre version de serveur de base de données MySql est la 5.1.49-3-log.
Votre version du module GD est la bundled (2.0.34
compatible) (indispensable pour toutes les images).
------------------------------------------------------------------------
Liste des modules implémentés avec votre php :
PDO Reflection SPL SQLite
SimpleXML bcmath calendar cgi
ctype curl date dba
dbase dom exif filter
ftp gd gettext gmp
hash iconv imap json
libxml mbstring mcrypt mhash
ming mysql mysqli openssl
pcre pdf pdo_mysql pdo_pgsql
pdo_sqlite pgsql posix pspell
session soap sockets standard
sysvmsg sysvsem sysvshm tokenizer
wddx xml xmlreader xmlrpc
xmlwriter xsl zip zlib
------------------------------------------------------------------------
Les réglages php :
* La mémoire maximale allouée à php est de 128M (/memory_limit/).
* La taille maximum d'une variable envoyée à Gepi ne doit pas
dépasser 64M (/post_max_size/).
* Le temps maximum alloué à php pour traiter un script est de 120
secondes (Cette valeur devrait suffire dans la grande majorité
des cas) (/max_execution_time/).
.......
Il semblerait que ce soit une partie bien précise du script PHP
".../eleves/visu_eleve.inc.php" qui pose problème. Après avoir désactivé
tous les affichages des onglets (à savoir "Onglet eleves", "Onglet
responsables", etc) en les mettant en commentaires dans le script, le
chargement de la page s'est fait normalement. Ce n'est qu'en les
réactivant un à un que j'ai pu constater qu'en dé-commentant le code
ci-dessous, le chargement de la page s’allongeait considérablement,
surtout pour les élèves ayant plusieurs bulletins (un par trimestre).
Ce bout de code se trouve à la ligne 1518 du fichier sous l'onglet
"bulletins". C'est celui qui calcule les moyennes sur les bulletins.
for($loop=$periode1;$loop<=$periode2;$loop++) {
$periode_num=$loop;
include "../lib/calcul_moy_gen.inc.php";
//$tab_moy_gen[$loop]=$moy_generale_classe;
//======================================================================
$tab_moy['periodes'][$periode_num]=array();
$tab_moy['periodes'][$periode_num]['tab_login_indice']=$tab_login_indice;
// [$login_eleve]
$tab_moy['periodes'][$periode_num]['moy_gen_eleve']=$moy_gen_eleve;
// [$i]
$tab_moy['periodes'][$periode_num]['moy_gen_eleve1']=$moy_gen_eleve1;
// [$i]
//$tab_moy['periodes'][$periode_num]['moy_gen_classe1']=$moy_gen_classe1;
// [$i]
$tab_moy['periodes'][$periode_num]['moy_generale_classe']=$moy_generale_classe;
$tab_moy['periodes'][$periode_num]['moy_generale_classe1']=$moy_generale_classe1;
$tab_moy['periodes'][$periode_num]['moy_max_classe']=$moy_max_classe;
$tab_moy['periodes'][$periode_num]['moy_min_classe']=$moy_min_classe;
// Il faudrait récupérer/stocker les catégories?
$tab_moy['periodes'][$periode_num]['moy_cat_eleve']=$moy_cat_eleve;
// [$i][$cat]
$tab_moy['periodes'][$periode_num]['moy_cat_classe']=$moy_cat_classe;
// [$i][$cat]
$tab_moy['periodes'][$periode_num]['moy_cat_min']=$moy_cat_min;
// [$i][$cat]
$tab_moy['periodes'][$periode_num]['moy_cat_max']=$moy_cat_max;
// [$i][$cat]
$tab_moy['periodes'][$periode_num]['quartile1_classe_gen']=$quartile1_classe_gen;
$tab_moy['periodes'][$periode_num]['quartile2_classe_gen']=$quartile2_classe_gen;
$tab_moy['periodes'][$periode_num]['quartile3_classe_gen']=$quartile3_classe_gen;
$tab_moy['periodes'][$periode_num]['quartile4_classe_gen']=$quartile4_classe_gen;
$tab_moy['periodes'][$periode_num]['quartile5_classe_gen']=$quartile5_classe_gen;
$tab_moy['periodes'][$periode_num]['quartile6_classe_gen']=$quartile6_classe_gen;
$tab_moy['periodes'][$periode_num]['place_eleve_classe']=$place_eleve_classe;
$tab_moy['periodes'][$periode_num]['current_eleve_login']=$current_eleve_login;
// [$i]
//$tab_moy['periodes'][$periode_num]['current_group']=$current_group;
if($loop==$periode1) {
$tab_moy['current_group']=$current_group; // [$j]
}
$tab_moy['periodes'][$periode_num]['current_eleve_note']=$current_eleve_note;
// [$j][$i]
$tab_moy['periodes'][$periode_num]['current_eleve_statut']=$current_eleve_statut;
// [$j][$i]
//$tab_moy['periodes'][$periode_num]['current_group']=$current_group;
$tab_moy['periodes'][$periode_num]['current_coef']=$current_coef; //
[$j]
$tab_moy['periodes'][$periode_num]['current_classe_matiere_moyenne']=$current_classe_matiere_moyenne;
// [$j]
$tab_moy['periodes'][$periode_num]['current_coef_eleve']=$current_coef_eleve;
// [$i][$j] ATTENTION
$tab_moy['periodes'][$periode_num]['moy_min_classe_grp']=$moy_min_classe_grp;
// [$j]
$tab_moy['periodes'][$periode_num]['moy_max_classe_grp']=$moy_max_classe_grp;
// [$j]
if(isset($current_eleve_rang)) {
// $current_eleve_rang n'est pas renseigné si $affiche_rang='n'
$tab_moy['periodes'][$periode_num]['current_eleve_rang']=$current_eleve_rang;
// [$j][$i]
}
$tab_moy['periodes'][$periode_num]['quartile1_grp']=$quartile1_grp;
// [$j]
$tab_moy['periodes'][$periode_num]['quartile2_grp']=$quartile2_grp;
// [$j]
$tab_moy['periodes'][$periode_num]['quartile3_grp']=$quartile3_grp;
// [$j]
$tab_moy['periodes'][$periode_num]['quartile4_grp']=$quartile4_grp;
// [$j]
$tab_moy['periodes'][$periode_num]['quartile5_grp']=$quartile5_grp;
// [$j]
$tab_moy['periodes'][$periode_num]['quartile6_grp']=$quartile6_grp;
// [$j]
$tab_moy['periodes'][$periode_num]['place_eleve_grp']=$place_eleve_grp;
// [$j][$i]
$tab_moy['periodes'][$periode_num]['current_group_effectif_avec_note']=$current_group_effectif_avec_note;
// [$j]
//======================================================================
}
Est ce que l'on peut optimiser ce code? Ou bien dois-je chercher la
solution autre part?
Je ne pense pas qu'il y ait grand chose à faire.
Sauf erreur, le SAV d'OVH parlait d'index manquants et de requêtes
portant sur des liaisons de tables.
Est-ce qu'une mise à jour de la base arrange des choses?
Les seules requêtes présentant des jointures sont:
$sql="SELECT e.* FROM eleves e, j_eleves_classes c
WHERE (
e.login = c.login and
c.id_classe = '".$id_classe."' and
c.periode='".$periode_num."'
)
ORDER BY e.nom, e.prenom";
et une des deux suivantes selon que l'on utilise ou non les catégories:
$sql="SELECT DISTINCT jgc.id_groupe, jgc.coef, jgc.categorie_id,
jgc.mode_moy ".
"FROM j_groupes_classes jgc, j_groupes_matieres jgm,
j_matieres_categories_classes jmcc, matieres m, matieres_categories mc " .
"WHERE ( " .
"mc.id=jmcc.categorie_id AND ".
"jgc.categorie_id = jmcc.categorie_id AND " .
"jgc.id_classe=jmcc.classe_id AND " .
"jgc.id_classe='".$id_classe."' AND " .
"jgm.id_groupe=jgc.id_groupe AND " .
"m.matiere = jgm.id_matiere " .
"AND jgc.id_groupe NOT IN (SELECT id_groupe FROM j_groupes_visibilite
WHERE domaine='bulletins' AND visible='n')".
") " .
"ORDER BY jmcc.priority,mc.priority,jgc.priorite,m.nom_complet";
calc_moy_debug($sql."\n");
$appel_liste_groupes = mysql_query($sql);
ou
$sql="SELECT DISTINCT jgc.id_groupe, jgc.coef, jgc.mode_moy
FROM j_groupes_classes jgc, j_groupes_matieres jgm
WHERE (
jgc.id_classe='".$id_classe."' AND
jgm.id_groupe=jgc.id_groupe
AND jgc.id_groupe NOT IN (SELECT id_groupe FROM j_groupes_visibilite
WHERE domaine='bulletins' AND visible='n')
)
ORDER BY jgc.priorite,jgm.id_matiere";
calc_moy_debug($sql."\n");
$appel_liste_groupes = mysql_query($sql);
Cordialement.
--
Stephane Boireau
Collège Le Hameau - Bernay (27)
http://stephane.boireau.free.fr/gadgets/crobards.html
_________________________________________________________________________________
Documentation Gepi en ligne : http://www.sylogix.org/projects/gepi/wiki
Pour modifier ou résilier votre abonnement à cette liste :
https://lists.sylogix.net/mailman/listinfo/gepi-users