Requête MySQL trop lente : comment trouverd'où ça vient ?

La question :

Bonjour

J'ai une requête SQL très lente sur une machine et j'aimerais savoir
pourquoi. Cette requête s'exécute beaucoup plus rapidement (7-8
secondes au lieu d'1-2 minutes) sur une autre machine qui devrait être
sensiblement équivalente.

La requête est un peu compliquée, je ne la jette pas comme ça tout de
suite (même si ça viendra peut-être). Par contre comment savoir ce qui
prend du temps à MySQL ? J'ai utilisé EXPLAIN pour avoir un plan
d'exécution et sur les deux machines : le plan est le même. Y a-t-il
moyen d'avoir plus d'informations sur le temps consommé par chacune des
opérations du plan par exemple ?

Merci

Yliur

Poser votre question sur le forum Programmation

Les 7 réponses :

Yliur a couché sur son écran :


Bonjour

J'ai une requête SQL très lente sur une machine et j'aimerais savoir
pourquoi. Cette requête s'exécute beaucoup plus rapidement (7-8
secondes au lieu d'1-2 minutes) sur une autre machine qui devrait être
sensiblement équivalente.

La requête est un peu compliquée, je ne la jette pas comme ça tout de
suite (même si ça viendra peut-être). Par contre comment savoir ce qui
prend du temps à MySQL ? J'ai utilisé EXPLAIN pour avoir un plan
d'exécution et sur les deux machines : le plan est le même. Y a-t-il
moyen d'avoir plus d'informations sur le temps consommé par chacune des
opérations du plan par exemple ?

Merci

Yliur


Taper explain <requete>; peut donner des pistes

ex:

explain select toto from tutu where id = 123;

http://dev.mysql.com/doc/refman/5.0/fr/explain.html

Alain Montfranc a émis l'idée suivante :


Yliur a couché sur son écran :


Bonjour

J'ai une requête SQL très lente sur une machine et j'aimerais savoir
pourquoi. Cette requête s'exécute beaucoup plus rapidement (7-8
secondes au lieu d'1-2 minutes) sur une autre machine qui devrait être
sensiblement équivalente.

La requête est un peu compliquée, je ne la jette pas comme ça tout de
suite (même si ça viendra peut-être). Par contre comment savoir ce qui
prend du temps à MySQL ? J'ai utilisé EXPLAIN pour avoir un plan
d'exécution et sur les deux machines : le plan est le même. Y a-t-il
moyen d'avoir plus d'informations sur le temps consommé par chacune des
opérations du plan par exemple ?

Merci

Yliur


Taper explain <requete>; peut donner des pistes

ex:

explain select toto from tutu where id = 123;

http://dev.mysql.com/doc/refman/5.0/fr/explain.html


Pardon pas lu jusqu'au bout (fatigue toussa)

Un "OPTIMIZE TABLE" sur les tables pour les defragmenter ?

Le Thu, 29 Nov 2012 17:44:59 +0100
Alain Montfranc <urs> a écrit :


Alain Montfranc a émis l'idée suivante :


Yliur a couché sur son écran :


Bonjour

J'ai une requête SQL très lente sur une machine et j'aimerais
savoir pourquoi. Cette requête s'exécute beaucoup plus rapidement
(7-8 secondes au lieu d'1-2 minutes) sur une autre machine qui
devrait être sensiblement équivalente.

La requête est un peu compliquée, je ne la jette pas comme ça tout
de suite (même si ça viendra peut-être). Par contre comment savoir
ce qui prend du temps à MySQL ? J'ai utilisé EXPLAIN pour avoir un
plan d'exécution et sur les deux machines : le plan est le même. Y
a-t-il moyen d'avoir plus d'informations sur le temps consommé par
chacune des opérations du plan par exemple ?

Merci

Yliur


Taper explain <requete>; peut donner des pistes

ex:

explain select toto from tutu where id = 123;

http://dev.mysql.com/doc/refman/5.0/fr/explain.html


Pardon pas lu jusqu'au bout (fatigue toussa)



Je me demandais s'il y avait moyen d'avoir des informations sur le
temps consacré à chaque opération, pendant une exécution réelle de la
requête.


Un "OPTIMIZE TABLE" sur les tables pour les defragmenter ?


J'ai essayé ça, mais ça n'a rien changé.

Le 30/11/2012 08:16, Yliur a écrit :


Le Thu, 29 Nov 2012 17:44:59 +0100
Alain Montfranc <urs> a écrit :


Alain Montfranc a émis l'idée suivante :


Yliur a couché sur son écran :
Bonjour

J'ai une requête SQL très lente sur une machine et j'aimerais
savoir pourquoi. Cette requête s'exécute beaucoup plus rapidement
(7-8 secondes au lieu d'1-2 minutes) sur une autre machine qui
devrait être sensiblement équivalente.

La requête est un peu compliquée, je ne la jette pas comme ça tout
de suite (même si ça viendra peut-être). Par contre comment savoir
ce qui prend du temps à MySQL ? J'ai utilisé EXPLAIN pour avoir un
plan d'exécution et sur les deux machines : le plan est le même. Y
a-t-il moyen d'avoir plus d'informations sur le temps consommé par
chacune des opérations du plan par exemple ?

Merci

Yliur

Taper explain <requete>; peut donner des pistes

ex:

explain select toto from tutu where id = 123;

http://dev.mysql.com/doc/refman/5.0/fr/explain.html


Pardon pas lu jusqu'au bout (fatigue toussa)



Je me demandais s'il y avait moyen d'avoir des informations sur le
temps consacré à chaque opération, pendant une exécution réelle de la
requête.


Un "OPTIMIZE TABLE" sur les tables pour les defragmenter ?


J'ai essayé ça, mais ça n'a rien changé.


peut être avec show profile
<http://dev.mysql.com/doc/refman/5.0/en/show-profile.html>

Le Fri, 30 Nov 2012 08:52:44 +0100
Toxico Nimbus a écrit :


Le 30/11/2012 08:16, Yliur a écrit :


Le Thu, 29 Nov 2012 17:44:59 +0100
Alain Montfranc <urs> a écrit :


Alain Montfranc a émis l'idée suivante :
Yliur a couché sur son écran :
Bonjour

J'ai une requête SQL très lente sur une machine et j'aimerais
savoir pourquoi. Cette requête s'exécute beaucoup plus rapidement
(7-8 secondes au lieu d'1-2 minutes) sur une autre machine qui
devrait être sensiblement équivalente.

La requête est un peu compliquée, je ne la jette pas comme ça
tout de suite (même si ça viendra peut-être). Par contre comment
savoir ce qui prend du temps à MySQL ? J'ai utilisé EXPLAIN pour
avoir un plan d'exécution et sur les deux machines : le plan est
le même. Y a-t-il moyen d'avoir plus d'informations sur le temps
consommé par chacune des opérations du plan par exemple ?

Merci

Yliur

Taper explain <requete>; peut donner des pistes

ex:

explain select toto from tutu where id = 123;

http://dev.mysql.com/doc/refman/5.0/fr/explain.html

Pardon pas lu jusqu'au bout (fatigue toussa)



Je me demandais s'il y avait moyen d'avoir des informations sur le
temps consacré à chaque opération, pendant une exécution réelle de
la requête.


Un "OPTIMIZE TABLE" sur les tables pour les defragmenter ?


J'ai essayé ça, mais ça n'a rien changé.


peut être avec show profile
<http://dev.mysql.com/doc/refman/5.0/en/show-profile.html>


Merci, même si ce n'est pas très détaillé ça m'a mis sur la voie .
Ça devrait être bon maintenant.

Poser votre question sur le forum Programmation

Questions similaires :

Quelqu'un at-il suggérer une des fonctions de base de données mySQL de répa

Le mercredi 10 Juin 2015 à 14:33 par colindeloffre : Pour résoudre le problème, passez par le lien ou lisez les instructions au bas de la - Recovery Toolbox for MySQL Apportez votre base de données en mode de récupération Vous devez apporter votre base de données. Arrêt dans le cas où c'est encore...

[MYSQL] Quel est le fichier my.ini effectivement chargé ?

Eric Demeester écrivait : C'est vrai. J'ai fait des essais en mettant des fichiers my.ini dans les différentes localisations, avec pour chacun quelques petites différences.(*) L'utilitaire mysql "my_print_defaults.exe" montre bien l'ordre successif des chargements mais...

MySQL : changer le propriétaire d'une base

Eric Demeester writes: Procédé intéressant, mais je souhaite que Tartempion puisse gérer plusieurs bases.[/color] Oui, c'est ce que j'ai compris et c'est bien ce que je montre mais que je n´ai pas dit ;) Le "toto+" signifie que toto pourra jouer avec toute base...

MySQL passer en UTF-8 ?

J'ai suivi les conseils de : et j'ai donc édité mon fichier " /etc/mysql/my.cnf". en y ajoutant : character_set_database=utf8 character_set_server=utf8 skip-character-set-client-handshake une première fois, et...

aide sur une requete

Bonjour, Pour connaître tous les clients ayant commandé en 2012 je fais : select distinct comptesClients from VENTES where date like "2012%"; Je peux faire la même requête pour 2011 par exemple mais ce que j'aimerais ce serait de trouver la liste des clients ayant commandé en 2011 mais pas en...