Bonjour,

Sur une application web, j'ai une page "tableau de bord" avec plusieurs compteurs. Ceux ci me retourne le nombre d'enregistrement en fonction de certain états. Les résultats sont tiré de 2 table qui contiennent plus de 20 000 lignes. J'ai un hebergement mutualisé ovh pack pro(enfin le plus chere). Seulement depuis 2 jours, sans modifer mes requêtes, j'ai une erreur sql !

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2013 Lost connection to MySQL server during query' in /home/bluewirehh/www/capecomftp.bluewire/core/Database/MysqlDatabase.php:57 Stack trace: #0 /home/bluewirehh/www/capecomftp.bluewire/core/Database/MysqlDatabase.php(57): PDOStatement->execute(Array) #1 /home/bluewirehh/www/capecomftp.bluewire/core/Table/Table.php(33): Core\Database\MysqlDatabase->prepare('\n SE...', Array, 'App\\Entity\\Ftth...', false) #2 /home/bluewirehh/www/capecomftp.bluewire/app/Table/FtthOptimumCapecomTable.php(169): Core\Table\Table->query('\n SE...', Array) #3 /home/bluewirehh/www/capecomftp.bluewire/app/Controller/HomeController.php(37): App\Table\FtthOptimumCapecomTable->listBpt() #4 /home/bluewirehh/www/capecomftp.bluewire/web/index.php(36): App\Controller\HomeController->index() #5 {main} thrown in /home/bluewirehh/www/capecomftp.bluewire/core/Database/MysqlDatabase.php on line 57

Pour info habituellement, la page met quand même 10s max a charger. donc je ne sais pas vraiment quoi faire!

Si quelqu'un a déjà effectué des apps avec des tableaux de bord, merci de me donner des conseils !

8 réponses


Bonjour.
Pourquoi ne pas tout simplement faire exécuter les requêtes SQL qu'une fois que la page est affichée, via javascript ?
Car 10 secondes environ pour l'affichage d'une page, c'est énorme.
Dans la pratique, une fois la page affichée, via javascript tu peux faire appel à une page qui exécutera une première requête puis une fois que celle-ci retourne la réponse, tu en affiche le résultat, puis tu fais appel à une autre page qui exécutera une autre requête, tu récupères le résultat, tu l'affiches, etc ...

Par contre, vu l'erreur qui est retournée, c'est que l'exécution des requêtes SQL prend trop de temps et du coup la connexion avec le serveur SQL est perdue.

cid5420
Auteur

oui par rapport à l'erreur, je pense que mes requêtes sont trop lourde !

Pour le js, je ne connais pas ce principe, est ce que tu pourrais détailler un peut plus ou me renvoyer vers de la doc ?

https://www.grafikart.fr/tutoriels/jquery/scroll-infini-249
Ca me semble pas mal pour régler ton soucis.
Le problème, c'est qu'il utilise les fonctions mysql- qui sont aujourd'hui dépréciée (Actuellement, on utilise PDO). Mais le principe reste le même

@Romain Ma : Il n'a pas besoin de scroll infini, il ne veut pas lister des enregistrements, mais plutôt afficher des statistiques.
@cid5420 : Visionnes certains Tutoriels Javascript et aussi Tutoriels jQuery, ça t'aidera.

Les autres pages mettent autant de temps à charger ou c'est uniquement pour cette page là ? Je pense pas que ça aide énormément de faire du Ajax... On pourrait peut-être voir les requêtes, elles pourraient peut-être être optimisées dans le traitement que tu fais côté serveur ?

oui parce que 10 secondes pour effectuer 2 requettes c'est quand meme beaucoup. moi j'ai eu des soucis de lenteurs avec mysql mais parce que ma table faisait 70 000 000 d'entrées.... 20 000 c'est pinuts pour mysql ! fait voir tes requètes :)

oui 20000 c'est peanuts
regarde si tu ne fais pas de produit cartesien (20000 x 20000)
vérifies aussi si tu as tous les index nécessaires

cid5420
Auteur

En fait il n'y a pas uniquement 2 requêtes mais environ une vingtaine ! sur chaque compteur, il y a une requête, de plus je dois faire des etiquettes pour informer les utilisateurs les nouveaux ajout dans chaque compteur ! J'exagere peut être avec les 10s mais on ne doit pas être loin !
Sinon, oui, c'est la seul page qui est aussi lourde.

Demain j'essaierais de mettre l'application en mode maquette pour que vous puissiez me donner vos critiques et optimisation que je peut envisager.

Pour les requêtes, je vous préparerais un fichier avec la structure de bdd et les requetes de la page !

Pour finir, j'utilise un model mvc vue sur grafikart, je suis completement à l'aise avec celui-ci et j'essaie en permanace d'optimiser mon code !