Voir la version complète : PROBLEME LOCKED mysql
kikilevrai
19/05/2008, 15h00
Bonjour tout le monde !
Voila je travail sur un site et depuis peu nous avons hébergé ce site chez OVH.
Hors depuis qu'il est chez OVH j'ai un gros problème !
Quand j'ai une requete de type "update" qui s'exécute, celle-ci bloque toutes les requêtes utilisant la même table !
Hors avant avec la même architecture sur l'ancien serveur (pictime) il n'y avait aucun problème à ce niveau !
quelqu'un aurait-il déjà eu ce problème ?
merci d'avance
kikilevrai
19/05/2008, 17h47
En faite le problème est au moment ou je fais un UPDATE il me lock la table et toutes les autres requêtes (SELECT) qui utilisent cette table bloque et dans la liste des process mysql il y un plein de ligne qui sont à "LOCKED"
hello
tu es sur un dédié ou en mutu?
kikilevrai
19/05/2008, 20h09
Je suis sur un dédié avec une gentoo release 2 OHV
je n'ai jamais eu ce probleme et normalement, les tables ne se lockent pas comme ca.
Peux poster les requetes que tu effectues et indiquer apres quelle requete tu as le probleme?
Peux tu aussi preciser la version de mysql et le type de db que tu utilises?
kikilevrai
20/05/2008, 09h45
Enfaite après plusieurs test il se trouve que le problème est le suivant :
Il y à une grosse requête SELECT qui s'exécute (dans les processus le statut de cette requete est à "Copying to tmp table") et tant que cette requete n'est pas fini, derrière toutes les requete utilisant une table de la première requete SELECT sont à locked.
Ce qui est bizarrec'est que sur l'ancien serveur il n'y avais aucun problème et au niveau de config du my.cnf, httpd.conf etc sont exactement pareil ! :(
braindead
20/05/2008, 11h25
As-tu bien mis des index là où ca va bien?
La différence c'est qu'avant tu utilisait mysql 3 (? je présume = release 1) qui ne sait pas créer de tables temporaire.
Solutions (à tester) :
1. Crée bien tes index pour optimiser la requete
2. Optimise / répare la table
3. Change les droits du suser pour interdire les tables temporaires (via webmin)
Bon courage !
kikilevrai
20/05/2008, 12h16
A partir de webmin ?? ou sa dans webmin ? ne serait-ce pas à partir de phpMyAdmin plutôt ?
kikilevrai
20/05/2008, 12h30
Les utilisateurs se connecte avec l'utilisateur "X", j'ai enlevé les droits "Create_tmp_table_priv" et "Lock_tables_priv" mais il y à toujours des locked et des create tmp dans les process lancés par mysql...
c'est fou quand même ! !
braindead
20/05/2008, 12h51
Webmin = gestion des droits (mais ça ne semble pas fonctionner. As-tu relancer mysql ?)
PhpMyAdmin = optimisation / réparation des tables
kikilevrai
20/05/2008, 13h11
j'ai exécuter les différentes taches mais toujours rien à a part une table process qui se remplit de "locked" et de "create tmp table".
reprenons. Type de mysql ? type de table (myisam/innodb) ? qu'est ce qui provoque les locking finalement (tu changes 3 fois d'avis dans le fil !)
en bref :
mYsql toutes versions utilise du table locking en myisam et du row level locking en innodb. Traduction ; en myisam ; tu fais un update la table est lockée. C'est normal c'est comme ca partout. (Pour les puristes : je passe sous silence qqes subtilités au niveau des process en parallèle.)
la creation de "tmp table" PAR MYSQL (pas par une query !) est tout a fait normale en cas de queries "lourdes" ou en particulier traitant d'objets lourds (BLOB, etc), ou de queries complètement pourries ( JOIN, etc ). Cette creation de tmp_table par le serveur n'est aucunement affectée par les permissions d'users.
(Des queries peuvent aussi demander la creation de tmp_table, c'est ces choses la que visent les permissions)
Tu peux reduire la chance de creation de tmp_table par optimisation des parametres du serveur (en augmentant la taille des tmp_table en RAM) - bien que ce type de parametre soit si je me souviens bien "par process" et que tu puisses planter ton serveur en y chipotant trop (c'est un métier)
MAis il est plus probable que les queries soient en cause : pour optimiser tes queries, fais un EXPLAIN (et lire la doc d'explain). Tu peux aussi passer les tables en Innodb, bien que innodb soit a mon sens une merde sans nom pour l'usage qu'on en fait - myISAM malgré ses lockings est bien plus rapide pour 99% des applications qu'on retrouvera sur un serveur OVH.
kikilevrai
21/05/2008, 08h22
mes tables sont au format Myisam et je suis sur mysql 5.0.44-log et la version sur l'ancien serveur (la ou tout fonctionnait) été la version 5.0.21
Mes tables sont au format MyIsam
La requête qui pose problème est une grosse requête qui comporte 5 LEFT JOIN de ce type
LEFT JOIN (SELECT creation_time AS timeGas, prix AS pxGas, station, user AS posterGas, id AS idGas FROM carbeo_prix WHERE carburant = '1' AND aff = 1) px1 on (px1.station = ss.id)
enfaite cette requête quand elle est exécute le serveur créer une table temporaire et le temps qu'il créé la table temporaire, toutes les tables utilisées dans la requete sont bloquées. et donc tout les autres SELECT, UPDATE etc... sur ces tables sont "locked"
vBulletin® v.3.6.8, Copyright ©2000-2009, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org