|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 8 ![]() |
Bonjour @ tous,
j'espère que vous pourrez m'aider car j'ai soucis avec un de mes sites. Situation : Les données sont telles que j'ai mise en place un système de cache (memcache). Et pour gérer la mise à jour de mes données en cache j'utilise ma crontab pour vérifier que les dates de mise à jour de certains champs n'est pas plus récent que la version de mon cache (info aussi en base) Donc je fais 2 jointures sur une table de 250.000 lignes qui dure environ 8 secondes pour me retourner les ID des caches a régénérer. Problème : Mon soucis c'est que la requête en question semble prioritaire et que pendant son exécution les visiteurs attendent en ce demandant ce qu'il se passe. Le temps d'exécution de cette requête ne me gène pas plus que ça vu qu'elle tourne en tache de fond. Mais je voudrais faire en sorte qu'elle ne soit prioritaire sur aucune autre requête... Il me semble que c'était possible. Mes tables sont en InnoDB avec des champs "integer" indexés pour les dates (unix_datetime) que l'on compare. Exemple du type de requête : Code :
|
||
|
|
00
|
|
|
#2 |
![]() ![]() |
8 secondes pour exécuter ta requête avec seulement 250 000 lignes, ce n'est pas normal !
Tes tables sont-elles correctement indexées ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#3 |
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 8 ![]() |
Oui pas de soucis sur l'indexation de mes tables.
C'est pas une table de 250.000 lignes mais une jointure entre 3 tables d'au moins 250.000 lignes chacune, joint sur une clé. Cette requête est optimisé à son extrême, et je ne pense pas qu'on puisse faire mieux. Le système assez ancien y est sûrement aussi pour beaucoup mais n'est pas non plus changeable. Ce que je voudrais surtout c'est que la requête ne ralentisse pas les autres. J'ai d'autre requête qui me pose le même soucis. Je voudrais qu'elles soient "non-prioritaires". J'ai vu des choses pour définir certaines priorités dans l’exécution mais rien pour baisser la priorité. Avez-vous une idée ? |
|
|
00
|
|
|
#4 |
![]() ![]() |
Même avec 3 tables de 250 000 lignes, ça fait quand même long !
On peut avoir le résultat de EXPLAIN ta requête ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#5 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Vous pouvez toujours regarder du coté du HIGH_PRIORITY
Mais comme CinePhil, je pense que 8 secondes pour une requete avec une jointure, cela me parait anormal... (Indexes, condition de restriction, ... ) Vous pouvez poster un plan d'execution, juste pour information ? Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
00
|
|
|
#6 | ||||
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 8 ![]() |
Un petit explain :
Code :
Citation:
Je veux que les 500 ou 1000 autres requêtes possibles soient prioritaire sur celle là. Je restais persuadé que c'était possible avec un truc comme : SELECT LOW_PRIORITY xxx ... mais je trouve pas. Citation:
Merci pour vos réponses |
||||
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Vous n'avez pas d'index sur la colonne date_modif de la table tab_image ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 8 ![]() |
Si si, le champs est bien indexé
|
|
|
00
|
|
|
#9 |
![]() ![]() |
On ne le voit pas dans l'EXPLAIN !
Par contre, on voit qu'il n'y a que 114 538 lignes de parcourues, ce qui devrait être très rapide. As-tu essayé de lancer la requête directement dans une console MySQL ou sur phpMyAdmin ? Le résultat devrait apparaître quasi immédiatement. Si ça dure quand même 8 secondes, c'est que ton serveur sature. Si c'est immédiat par ce canal, c'est que la lenteur vient d'ailleurs.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#10 | |
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 8 ![]() |
Citation:
Je viens de vérifier elle y est. En local elle dure 2.4 sec Sur le serveur quadri-core de test à peu prêt autant Mais chez le client : entre 6 et 8 sec Elle pourrait durer 15 secondes ça ne me générait pas plus que ça... Ce qui est important c'est qu'elle ne mette pas les autres en attente => d'où la question : comment faire pour la dé-prioritarisé (<= super le mot) la requête ? PS : en local j'utilise SQL_NO_CACHE pour vérifier que mysql ne prend pas le cache et voir les "vrais" perfs. |
|
|
|
00
|
|
|
#11 | ||
![]() ![]() |
Citation:
Citation:
Le résultat devrait être immédiat, en tout cas dans une console MySQL ou dans phpMyAdmin ! On peut avoir la description des tables issue de SHOW CREATE TABLE nom_de_la_table ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#12 | ||
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 8 ![]() |
Autant pour moi, j'avais 2 dates indexées mais pas celle là.
C'est rajouté : Code :
Pour info j'ai trouvé un autre endroit où je fais la même requête pour des tables équivalentes mais avec un peu plus de ligne (20 fois plus) ça met 4.75 sec au lieu de 6 sec (sûrement + de 10 sec chez le client) |
||
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 859 ![]() |
salut,
regarde les réglages mysql, essaye de jouer sur les différents caches dont celui pour les jointures... tu y gagneras encore peut-être un peu... si tout est bien indexé les performances dépendent ensuite juste de la charge d'activité et de ce que doit bufferiser mysql... à voir donc
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#14 |
|
Invité de passage
![]() Développeur Web Inscription : juillet 2011 Messages : 8 ![]() |
Ok, merci je vais y jeter un œil
|
|
|
00
|
|
|
#15 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 859 ![]() |
je te conseille de lire ça
à savoir que tu peux gagner aussi du temps en forçant l'utilisation des indexes, ça désactive l'optimiseur en utilisant using
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com