Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

7 réponses
Avatar
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

7 réponses

Avatar
Alain Montfranc
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
Avatar
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)

Un "OPTIMIZE TABLE" sur les tables pour les defragmenter ?
Avatar
Yliur
Le Thu, 29 Nov 2012 17:44:59 +0100
Alain Montfranc 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é.
Avatar
Toxico Nimbus
Le 30/11/2012 08:16, Yliur a écrit :
Le Thu, 29 Nov 2012 17:44:59 +0100
Alain Montfranc 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>
Avatar
Yliur
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 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.
Avatar
Denis Beauregard
Le Thu, 29 Nov 2012 16:58:49 +0100, Yliur écrivait
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
Avatar
Yliur
Le Sun, 02 Dec 2012 13:19:38 -0500
Denis Beauregard
a écrit :

Le Thu, 29 Nov 2012 16:58:49 +0100, Yliur écrivait
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.