Oki, effectivement j'ai du faire un mic mac lors de l'export ! Merci beaucoup pour ton aide ;)
Bonjour à tous,
je fais la migration vers un serveur dédié du site d'un ami, tout c'est bien passé mais il y a encore quelques bugs au niveau sql qui me fait des 100% de charge de CPU (jusqu'à ce que je le redemarre)
notamment quand je fais cette requete :
Elle est vraiment dég. je vous l'accorde mais je n'ai pas fait le site.
Bref cette commande fait planter mon serveur alors qu'elle marche sans aucun soucis sur l'ancien(le résultat est instantané), auriez-vous des idées/pistes? sachant que les versions de mysql diffèrent, Merci d'avance.
18 réponses
Si l'export a été fait correctement au format SQL, les index sont dedans
c'est de l'Innodb ou du MyIsam ?
Les index sont ils bien créés ?
MyIsam, merci beaucoup ! Effectivement ,les index ne sont pas créés, mais comment faire cela? je pensais qu'ils étaient conservés lors de l'export/import via phpmyadmin, je dois tous les rentrer à la main?
Désolé , je reviens la queue entre les jambes, mais les indexs étais bien là, ma version de Phpmyadmin les caches juste par défaut, J'ai tout réimporté, la requête à fonctionner sur le coup, mais après diverses insertions dans la table, ça ne fonctionne plus comme si l'index devenait corrompu, j'ai beau analyser/optimiser rien n'y fait, si tu as une nouvelle piste, je suis preneur !
Merci d'avance !
Je n'utilise jamais le USING
tu peux le remplacer par ON(lfc1.lignefactureid = lf.lignefactureid)
le fait d'utiliser des INNER JOIN fait que s'il manque la moinde valeur, tu n'auras pas de résultat
essaye avec des LEFT JOIN
Pour voir comment la requête est interprétée, tu peux lancer la commande EXPLAIN devant le SELECT
ça indique quels index sont utilisés, s'il y a des tables temporaires créées ...
Ca me fait la même chose, en réduisant le nombre de join à 9 ça fontionne, mais à 10 il en veux plus de ma requete. Ce qui m'énerve le plus, c'est que sur l'ancienne base, ça fonctionne et pas sur la mienne, elle se trouve pourtant sur un serveur plus puiisant :o .
la seule chose qui pourrait être différent, c'est la config mysql mais j'ai pas accès à l'ancienne malheureusement.
dans le my.ini, tu peux augmenter le join_buffer_size qui est à 256k par défaut, essaye 1024k (sans garantie)
Si tu as acces à phpmyadmin, tu peux voir les variables système
Ah, merci, j'ai rien trouvé de probant voici la liste de l'ancienne db :
j'ai essayé de passer les tables en innoDB car apparement c'est plus rapide mais sans résultat, j'obtiens exactement le même temps pour 10 join (sur les 15) a savoir 2.8 secondes (sachant que pour 9 join c'est quasi instantanée)
que donne le explain ?
Si ta requête utilise des tables temporaires, essaye d'augmenter ceci :
en fonction de ta mémoire disponible
Voila ce que donne le explain, ça me parle pas du tout,
c'est parfait, les clés sont utilisées (possible keys)
du coup je ne vois plus trop
quelle version de Mysql ?
C'est la version 5.5.44, en tous cas je te remercie pour le temps que tu consacre à mon problème ;)
tu dis bien que c'est le nombre de jointures qui bloque, et non pas certaines jointures ?
Pourtant le nombre limite donné dans la doc est de 61 jointures.
Oui peut importe les jointures, j'ai essayé les premières avec les dernières et inversements tout fonctionne en dessous de 10 jointure. Mais c'est marrant car à 9 la requete prend quelques miniseconde et à 10 c'est 3s et à 11 c'est la mort :o