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

Le
Yliur
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Alain Montfranc
Le #25004062
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
Le #25004052
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 ?
Yliur
Le #25005712
Le Thu, 29 Nov 2012 17:44:59 +0100
Alain Montfranc
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é.
Toxico Nimbus
Le #25005972
Le 30/11/2012 08:16, Yliur a écrit :
Le Thu, 29 Nov 2012 17:44:59 +0100
Alain Montfranc
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
Yliur
Le #25006742
Le Fri, 30 Nov 2012 08:52:44 +0100
Toxico Nimbus
Le 30/11/2012 08:16, Yliur a écrit :
> Le Thu, 29 Nov 2012 17:44:59 +0100
> Alain Montfranc >
>> 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



Merci, même si ce n'est pas très détaillé ça m'a mis sur la voie :) .
Ça devrait être bon maintenant.
Denis Beauregard
Le #25013632
Le Thu, 29 Nov 2012 16:58:49 +0100, Yliur dans fr.comp.applications.sgbd:


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 ?



Une possibilité : les tableaux sont indexés sur une des machines et
pas sur l'autre. Un tableau indexé est lu plus rapidement.

Une machine avec un seul usager et beaucoup de mémoire par rapport à
une machine partagée et peu de mémoire vive, donc on utilise le disque
plus souvent.


Denis
Yliur
Le #25014922
Le Sun, 02 Dec 2012 13:19:38 -0500
Denis Beauregard a écrit :

Le Thu, 29 Nov 2012 16:58:49 +0100, Yliur dans fr.comp.applications.sgbd:

>
>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 ?

Une possibilité : les tableaux sont indexés sur une des machines et
pas sur l'autre. Un tableau indexé est lu plus rapidement.

Une machine avec un seul usager et beaucoup de mémoire par rapport à
une machine partagée et peu de mémoire vive, donc on utilise le disque
plus souvent.



Pour la différence entre les deux : j'ai vérifié les index et
l'utilisation des index a l'air d'être la même dans les deux plans
d'exécution. Pour les questions de mémoire, et d'utilisation, ça
devrait être large sur la machine la plus lente (la machine de
production). Peut-être un problème de configuration, ...

Ce n'est pas très grave, je me disais simplement que ça m'aiderait à
trouver l'origine du problème. Je suis sur une piste pour résoudre le
problème de manière beaucoup plus radicale, sur les deux machines.

Merci.
Publicité
Poster une réponse
Anonyme