Lost connection to MySQL server

a marqué ce sujet comme résolu.

Bonjour à tous,

J’ai conçu une application il y’a à peu près 1 an qui tourne assez bien mais certaines fois j’ai un message d’erreur qui me dit :

Fatal error: Uncaught exception ’PDOException’ with message ’SQLSTATE[HY000]: General error: 2013 Lost connection to MySQL server during query’ in liste-commandes.php:296 Stack trace: #0 liste-commandes.php(296): PDOStatement->execute(Array) #1 {main} thrown in liste-commandes.php on line 296

Je pensais au début qu’il s’agissait de mon code PHP mais je crois plutôt qu’il s’agit de ma base de données ou de mes requêtes. En essayant sur phpmyadmin, il me répond "Lost connection to MySQL server’

Voici la requête en question :

1
2
3
4
5
6
7
8
9
SELECT i.id_intervention, i.code_intervention, i.date_souhaitee, i.heure_debut, i.heure_fin, i.duree, i.frequence, i.materiel, i.signature, i.bl_mail, i.client_cmd, chantiers.id_client, chantiers.nom_chantier, chantiers.adresse AS adresse_chantier, chantiers.code_postal AS code_postal_chantier, chantiers.ville AS ville_chantier, clients.raison_sociale, clients.societe
FROM interventions AS i
INNER JOIN chantiers ON i.id_chantier = chantiers.id_chantier
INNER JOIN clients ON chantiers.id_client = clients.id_client
WHERE i.status != 2
AND i.valide = 1
AND i.type_chauffeur = "Ampiroll"
AND i.date_souhaitee > '2017-08-31'
ORDER BY i.date_souhaitee DESC

Sur les tables tous les champs concernés par un WHERE sont des index. Cette table interventions contient environ 13000 entrées et je récupère depuis fin août pour justement en avoir moins à charger mais sans succès. J’ai sans doute très mal conçu ma base mais je pense pas pouvoir faire de modifications dans l’immédiat…

Si quelqu’un a une idée pour que cette requête fonctionne comme avant. Merci d’avance

+0 -0

Salut !

Pourquoi vouloir afficher tout mais uniquement par rapport à une date ? Si tu mets en place une pagination, même plus besoin de limiter avec ça (mais tu le pourrais quand même).

Autre point : est-ce que tu as des index sur les colonnes type_chauffeur et date_souhaitee ?

+0 -0

Salut,

Merci de ta réponse. Pour commencer oui j’ai rajouté un index sur les colonnes type_chaufeur et date_souhaitee mais ça change rien.

Je tri par rapport à la date car pour la pagination j’utilise un plugin jQuery qui s’occupe de paginer, trier et me fait un champ de recherche dynamique.

J’ai juste besoin de charger les éléments dont j’ai besoin. Donc soit je charge tout, soit je charge par rapport à une date.

Le souci avec la pagination côté client, c’est que justement le serveur doit suivre, et là manifestement il ne suit pas.

Essaie un EXPLAIN de ta requête SQL et montre nous le résultat.

Juste un autre point, pendant que j’y pense : tu as dit avoir mis un index sur les colonnes utilisées dans WHERE. Est-ce que tu as aussi mis des index sur les colonnes des jointures, ou des contraintes de clés étrangères qui, sauf erreur de ma part, demandent un index (en tout cas avec InnoDB) ?

+0 -0

Effectivement pour la pagination côté client j’ai déjà remarqué que c’était quelque chose de très gourmand côté serveur car dans tous les cas je suis obligé de tout charger.

J’ai bien des Index sur tous les champs concernés par les jointures et les clés étrangères. Je fais un EXPLAIN dès que possible.

Merci ;)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte