MySQL : Pb de requete UPDATE très lente

  • Auteur de la discussion Auteur de la discussion miss34
  • Date de début Date de début
Nouveau WRInaute
Bonjour !

Je vous expose mon problème :

Je dispose d'une table qui comporte environ 8.000.000 d'entrées.
Elle est de format fixe, et comporte tous les index nécessaires pour effectuer rapidement les requetes.

D'ailleurs, les requetes SELECT s'effectuent toutes très rapidement.

En revanche, les requetes du type : " UPDATE table SET lu='oui' WHERE id=123456 " sont par période très très lentes (plusieurs dizaines de secondes).

Or le champ "id" est pourtant la clé primaire, et la table n'est jamais vérouillée au moment où la requete démarre.

J'ai pensé à un problème de mise à jour des index. En effet, ma table fait le poids suivant :

Données : 732 044 Ko
Index : 634 420 Ko
Total : 1 334 Mo

Mais lorsque j'effectue des INSERT, je n'observe pas ce pb.

Auriez-vous une idée de l'origine de telles lenteurs ? Peut-être la config du serveur Mysql, ou bien un problème dans les Index (mais un OPTIMIZE a été effectué très récemment ....)

Merci pour votre aide :)
 
WRInaute discret
à mon avis vu la taille de ta base, c'est la mise à jour des index qui est longue. Quand tu fais un insert c'est rajouté à la fin de ta base donc ça doit être facile à mettre à jour pour l'index par contre quand tu fais un update tu dois le forcer à recréer une partie de l'index à chaque champ enregistré. J'ai un copain qui bosse sur des tables très volumineuses aussi et qui quand il diot faire des updates important, il supprime l'index avant l'opération et le recrée juste après, c'est plus rapide.
 
WRInaute impliqué
Oui ça vient de ça.
Mais tu as énormément d´entrée dans ta table, aussi tu ne peux pas spécialiser plus tes tables, et répartir ainsi les requêtes sur différente tables?
Sinon, pour les requetes très longue, il faudrait (dans le cas ou tu ne règle pas ce problème d´index) lancer ton script en parallèle, par une autre connexion. Comme ça ce temps d´accès ne se répaercutera pas normalement.
 
Nouveau WRInaute
En fait, il s'agit d'une table referançant les informations liées à des messages que s'échangent des membres (en gros : l'expediteur, le destinataire, l'IP, ..)

Moi aussi, je pense à un pb d'index, mais ce qui est étrange, c'est que c'est très irrégulier : la requete peut être instantannée comme elle peut prendre 30 sec.

Si je trouve une solution je vous le fais savoir :)
 
WRInaute impliqué
en fait, c´est aléatoire car l´emplacement dans l´index est aléatoire...
Et donc tout dépend de la taille de cette partie d´index que la base doit regénérer...
Mais dans ce cas, tu ne peux pas essayer de faire au lieu de l´update une fonction comme ça:
Select -> récupère les anciennes valeurs
Delet -> l´ancienne entrée
Insert -> la nouvelle entrée

Aucune idée si cela va mieux marcher, et si ça te convient mais bon...
 
Discussions similaires
Haut